2017-08-26 55 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並重復該過程投下他們。