在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中。
发布于 2017-08-26 19:31:51
您可以在循环中调用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并重复这个过程来删除它们。
https://stackoverflow.com/questions/45898946
复制相似问题