2017-08-26 46 views
0

在python中,我测试了固定长度的组合,使用多个for循环重复使用和不重复。例如,如果我想数字的每个组合测试多达5允许的2和重复的长度,我这样做:不重复测试各种长度的组合

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

或(重复)'itertools.product'。 –

+1

[如何获取列表元素的所有可能组合?](https://stackoverflow.com/questions/464864/how-to-get-all-possible-combinations-of-a-list-s-元素) –

+0

或'itertools.permutations',如果你不想重复,但所有的结果排序。 –

回答

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并重复该过程投下他们。