问题描述
我需要找到一种使用python(aaaa,aaaab,aaa ... zzzz)从aaaa暴力到zzzz的方法。 与0000到9999类似。 是否有使用循环和列表的“魔术”方法?
解决方法
您可以使用itertools.product
简洁地完成此操作:
import itertools
import string
for elem in itertools.product(string.ascii_lowercase,repeat=5):
...
以下是此方法产生的前30个值的示例:
>>> values = itertools.product(string.ascii_lowercase,repeat=5)
>>> print(list(itertools.islice(values,30)))
[
('a','a','a'),('a','b'),'c'),# --Snip --
('a','x'),'y'),'z'),'b','d')
]
请注意,此序列中有26**5 == 11881376
个值,因此您可能不想将它们全部存储在列表中。在我的系统上,这样的列表大约占用100 MiB。
这是一个非常“基本”的示例:
chars = 'abcdefghijklmnopqrstuvwxyz'
my_list = []
for c1 in chars:
for c2 in chars:
for c3 in chars:
for c4 in chars:
my_list.append(c1+c2+c3+c4)
print(my_list)
,
要知道您认为什么是“魔术”并不容易,但是我看不到魔术在循环中。
这是一种变体:
cs = 'abcdefghijklmnopqrstuvwxyz'
list(map(''.join,[(a,b,c,d) for a in cs for b in cs for c in cs for d in cs]))