测试不同长度的组合,无重复

时间:2017-08-26 19:27:51

标签: python python-3.x combinations

在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中的所有这些组合。

1 个答案:

答案 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并重复此过程来删除它们。