在python中,我通过使用多个for循环测试了具有固定长度的组合,有和没有重复。例如,如果我想测试长度为2并且允许重复的最多5个数字的每个组合,我会这样做:
list1=[1,2,3,4,5]
for a in list1:
for b in list1:
print(str(a)+','+str(b) )
这对于固定长度来说似乎很简单,但是在测试所有不同长度时它不能很好地工作。当长度变化时,使用这种策略我将不得不制作5组不同的1,2,3,4和5个循环。这已经非常冗长和丑陋但随着列表大小变大,它会呈指数级变差。我正在寻找一种更有说服力的方法来测试python中的所有这些组合。
答案 0 :(得分:1)
您可以循环调用itertools.combinations
:
import itertools
list1 = [1, 2, 3, 4, 5]
for i in range(1, len(list1)):
print(list(itertools.combinations(list1, i)))
[(1,), (2,), (3,), (4,), (5,)]
[(1, 2), (1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5), (3, 4), (3, 5), (4, 5)]
[(1, 2, 3), (1, 2, 4), (1, 2, 5), (1, 3, 4), (1, 3, 5), (1, 4, 5), (2, 3, 4), (2, 3, 5), (2, 4, 5), (3, 4, 5)]
[(1, 2, 3, 4), (1, 2, 3, 5), (1, 2, 4, 5), (1, 3, 4, 5), (2, 3, 4, 5)]
如果您的list1
有重复项,您可以考虑通过转换为set
并重复此过程来删除它们。