我如何使用itertools或有效地执行此操作?该列表的长度为557845
#Generate all combinations of 4 elements and put on list
listLol=list(map("".join, itertools.combinations('1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',4)))
#This is too slow
for a in listLol:
for b in listLol:
for c in listLol:
for d in listLol:
for e in listLol:
cadena="SomeString-"+a+"-"+b+"-"+c+"-"+d+"-"+e
答案 0 :(得分:0)
您确实可以使用itertools.product
执行此操作。
IllAdvised = ["SomeString-" + "-".join(i) for i in itertools.product(listLol, repeat=5)]
您还可以考虑itertools.combinations_with_replacement
而不是简单itertools.combinations
来生成原始列表。 编辑: itertools.product
也可能是你想要的原始列表。如果是这种情况,那么您可以直接使用itertools.product(alphabetALPHABET, repeat=20)
。 (当然alphabetALPHABET
是你的原始字符串。)
然而,无论你如何做到这一点,都需要花费很长时间。您的列表中有557845 ^ 5个元素,如果您使用combinations_with_replacement
或itertools.product
,则可能是7311616 ^ 5。这个新列表中超过10 ^ 28个元素。即使您避免使用生成器的内存问题:
for i in itertools.product(listLol, repeat=5):
cadena="SomeString-" + "-".join(i)
#do something with cadena
此循环的运行时将超过Universe的当前年龄。无论您对语言的了解程度如何,或者您应用何种小优化,这个障碍都是难以处理的。我建议你尝试不同的方法。