2017-08-26 9 views
0

Pythonでは、複数のforループを使用して繰り返しの有無にかかわらず固定長の組み合わせをテストしました。私は許さ2と繰り返しの長さを5までの数字のすべての組み合わせをテストしたい場合たとえば、私はこれを行うだろう:繰り返しのないさまざまな長さの組み合わせのテスト

list1=[1,2,3,4,5] 
for a in list1: 
    for b in list1: 
     print(str(a)+','+str(b)) 

これは、固定長のために十分に簡単なようだが、それはとてもうまく動作しません。すべての長さをテストします。長さが変わっているときは、この戦略を使って、1、2、3、4、5ループの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に変換し、プロセスを繰り返すことによって、それらをドロップすることを検討してください。

関連する問題