我有这段代码可以创建5个字母的所有可能组合,并将它们分配给具有相同名称的变量:
import string
table = string.ascii_letters
table = list(table)
for i in table:
exec("%s = '%s'" % (i,i))
for t in table:
exec("%s = '%s'" % (i+t,i+t))
for k in table:
exec("%s = '%s'" % (i+t+k,i+t+k))
for m in table:
exec("%s = '%s'" % (i+t+k+m,i+t+k+m))
for h in table:
exec("%s = '%s'" % (i+t+k+m+h,i+t+k+m+h))
但是它很大并且不容易阅读。如何使它更紧凑?
答案 0 :(得分:7)
NA
考虑到这是一个庞大的列表,所以也许您只需要小写或大写字母,而不需要全部使用它们:
import string
table = string.ascii_letters
result = list(itertools.combinations(table, 5))
要创建变量,您可以更新globals()
或locals()
,但我认为您应该改用字典,因为通过创建变量,您如何知道是否存在?:>
>>> string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'
>>> string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
list(itertools.combinations(string.ascii_lowercase, 5))
例如,如果您仍然希望变量行为更新全局变量,则:
combination_dict = {"".join(e):''.join(e) for e in itertools.combinations(string.ascii_lowercase, 5)}
答案 1 :(得分:-1)
import string
from itertools import combinations_with_replacement
for i in combinations_with_replacement(string.ascii_letters,2):
print("".join(i))