1

1から8までの単純なリストがあり、7文字を含む組み合わせのみが必要だとします。どうすればそれを効率的に行うことができますか?リスト全体を繰り返さずにそれを行うことは可能ですか?

たとえば、これはリスト全体を実行します。

import itertools
stuff = [1, 2, 3,4,5,6,7,8]
count = 0
for L in range(0, len(stuff)+1):
    for subset in itertools.combinations(stuff, L):
        print(subset)
        count = count + 1
print count #returns 256 results with 8 matching the 7 length

Litertools.combinations(stuff, L):を7に変更すると機能しますが、多くの重複が発生します(72の結果で、ほとんどが重複です)。上記のコードから必要な7つの項目を抽出できることはわかっていますが、リストが大きい場合は、それを行うのは非効率的です。助言がありますか?

この場合、私が探している最終結果は次のとおりです。

(1, 2, 3, 4, 5, 6, 7)
(1, 2, 3, 4, 5, 6, 8)
(1, 2, 3, 4, 5, 7, 8)
(1, 2, 3, 4, 6, 7, 8)
(1, 2, 3, 5, 6, 7, 8)
(1, 2, 4, 5, 6, 7, 8)
(1, 3, 4, 5, 6, 7, 8)
(2, 3, 4, 5, 6, 7, 8)
4

1 に答える 1

11

itertools.combinationsうまく動作します:

>>> for c in itertools.combinations(stuff, 7):
...     print(c)
...     
(1, 2, 3, 4, 5, 6, 7)
(1, 2, 3, 4, 5, 6, 8)
(1, 2, 3, 4, 5, 7, 8)
(1, 2, 3, 4, 6, 7, 8)
(1, 2, 3, 5, 6, 7, 8)
(1, 2, 4, 5, 6, 7, 8)
(1, 3, 4, 5, 6, 7, 8)
(2, 3, 4, 5, 6, 7, 8)

combinations重複は、ループで実行していることが原因です。

于 2012-05-19T15:15:46.297 に答える