如何使此代码更紧凑,更易于阅读

时间:2019-05-08 08:01:36

标签: python python-3.x

我有这段代码可以创建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))

但是它很大并且不容易阅读。如何使它更紧凑?

2 个答案:

答案 0 :(得分:7)

使用itertools.combinations

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))