昨天有人在微信里找我帮忙:
我们就用这个需求,来巩固一下之前学过的 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 的更多方法和解释,完整说明可以参考这篇文章:
https://segmentfault.com/a/1190000038925492
总量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 应用的一个小场景,希望对你有所帮助。
本文只是以回文举例,不表示回文域名值得投资,市场有风险,投资需谨慎。