# 用Python组合ENS回文域名 **Published by:** [DFarm](https://paragraph.com/@dfarm/) **Published on:** 2022-09-12 **URL:** https://paragraph.com/@dfarm/python-ens ## Content 昨天有人在微信里找我帮忙:我们就用这个需求,来巩固一下之前学过的 Python 基础知识。循环组合需求很简单:26 个字母取 3 位组合,后面加上两位对应的字母组成回文。 什么是回文?就是 12321、abcba 这种组合。 所以我们只需要确认前三位就可以了,三种字母组合有多少种呢?26x26x26=17576种组合,这个组合要怎么写呢,就要用到之前学过的 for 循环了,废话少数,上代码!list = 'abcdefghijklmnopqrstuvwxyz' # 首先列出26个字母 words = [] # 创建一个空的列表,用来存放所有结果 for item_1 in list: # 循环第1位字母 for item_2 in list: # 循环第2位字母 for item_3 in list: # 循环第3位字母 word = item_1 + item_2 + item_3 # 将3个位置的字母组合,组成word words.append(word) # 将所有word添加到words这个列表中 print(len(words)) # 打印所有结果的数量 上面的代码非常简单,每一行注释都写清楚了,执行之后,会打印出17576这个数字。需求变更如果你执行上面的代码,打印所有 word 的时候,可以看到会有 aab 或者 baa 这种组合,出现了重复字母。 对方需求表示前三位的字母不可重复:这次需求更改之后,总量变成15600了,那么代码应该怎么写呢? 其实思路很简单,还是三次循环,每次后一位循环去掉前一位用过的字母即可。 但是这么写很累啊,都说 Python 很简单,没有简单办法吗?当然有!我们用 itertools 来写!import itertools list = itertools.permutations("abcdefghijklmnopqrstuvwxyz", 3) words = [] for item in list: words.append(item) print(len(words)) 首先解释一下 permutations 是啥意思:itertools 非常强大,关于 itertools 的更多方法和解释,完整说明可以参考这篇文章:itertools -- 高效迭代器│Python标准库前情提示: 测试代码中,右尖括号(>)表示命令行中输入的命令; 单独一行并以井字符(#)开头的为输出内容; 库的导入仅在本文的第一个测试代码中展现,其...https://segmentfault.com总量15600跑完了,这次终于对了吗?需求再次变更我跑了一遍数据,发现这15600里面1.4万都没注册:他说的回文变成了 ababa 这种。 再次分析这个需求,前三位 aba 本身就是一个回文,也就是说前两位字母排序且不重复即可。 那么非常简单,只需要将上一节的代码变量 3 改成 2 即可:这650个就是最终需要的结果了,现在我们把域名拼接完整,把他们打印出来:import itertools list = itertools.permutations("abcdefghijklmnopqrstuvwxyz", 2) words = [] for item in list: # item 这里item是列表,需要循环读取成字符串 word = "" for letter in item: word = word + letter # 此时已经搞到两位字母组合,只需要拼接后面的内容 word = word + word[0] + word[1] + word[0] # 这里第一个word就是两位字母,后面反复加上他们的第一位字母和第二位字母即可 print(word) words.append(word) 运行代码之后,你的 Run 窗口应该有以下的内容打印:注册状态查询和批量注册查这些域名有没有被注册了,后面可以写代码完成,也可以直接复制内容粘贴到:https://rare.id/ 即可结果不出意外:650条记录全部被注册了,本来剩下了几十个,我那个朋友注册走了。最后市面上虽然有很多帮你组合的工具,但是要满足你的特殊要求往往还是自己写代码最快。 全部需求完成,只用了12行代码,效率很高。当然本文不一定是最优解,完成这个需求还有很多种解法。 以上只是 Python 应用的一个小场景,希望对你有所帮助。 本文只是以回文举例,不表示回文域名值得投资,市场有风险,投资需谨慎。 ## Publication Information - [DFarm](https://paragraph.com/@dfarm/): Publication homepage - [All Posts](https://paragraph.com/@dfarm/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@dfarm): Subscribe to updates - [Twitter](https://twitter.com/DFarm_club): Follow on Twitter