2

この問題で手を貸していただけないでしょうか。

数値範囲のすべての可能な組み合わせを表す次のコードがあります。

import itertools
lst = [1, 2, 3]
combs = []
for i in xrange(1, len(lst)+1):
   els = [list(x) for x in itertools.combinations(lst, i)]
   combs.extend(els)

問題は、出力を次の形式で表すことです

[[1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]]

個々のテキスト ファイルで各組み合わせを表すことは、私にとって大きなメリットです。各テキスト ファイルは、組み合わせの各数値を 1 行で表します。(1,2) のように、1 は最初の行に、2 は 2 番目の行にコンマなしで配置します。

私を助けてくれてありがとう。

編集

助けてくれてありがとう。感謝します。

ここで解決すべき小さな問題がまだあります。

Poke ソリューションは素晴らしいですが、小さな問題があります (これを説明するのが私の間違いです)。

ファイルの出力は次のようになります。

[[1], [2], [3]]
[[1, 2], [1, 3], [2, 3]]
[[1, 2, 3]]

問題は、多数の組み合わせ (6-39) のコードを使用する必要があることです。

これで私を助けてもらえますか?提供されたコード自体を編集しても?

ミリオン事前に感謝

4

2 に答える 2

0

あなたの問題は、実際に組み合わせを生成することとは完全に別のものです。必要なのは、データを出力するための特別な方法です。そして、標準のファイル書き込み機能を使用して簡単にそれを行うことができました:

>>> combinations = [[1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]]
>>> for i, combination in enumerate(combinations):
        with open(r'C:\Users\poke\Desktop\foobar\{0}.txt'.format(i), 'w+') as f:
            for value in combination:
                f.write(str(value) + '\n')
于 2013-01-17T10:26:07.567 に答える
0
import itertools

def savecomb(a, basename):
    k = 0
    for n in range(1, len(a) + 1):
        for c in itertools.combinations(a, n):
            k += 1
            f = open("{}{}.txt".format(basename, k), "wt")
            for i in c:
                f.write("{}\n".format(i))
            f.close()

itertools では定義されていませんが、ここで説明されている powerset を使用する別の解決策があります (ページでpowersetを探します)。

def powerset(iterable):
    s = list(iterable)
    return itertools.chain.from_iterable(itertools.combinations(s, r) for r in range(len(s)+1))

def savecomb(a, basename):
    for k, c in enumerate(powerset(a)):
        with open("{}{}.txt".format(basename, k), "wt") as f:
            for i in c:
                f.write("{}\n".format(i))

すべてのサイズの組み合わせを取得することは、リストのすべてのサブセットを取得することとまったく同じであるため、これが機能します。空のサブセットを説明する空のファイルがあります。

また、n がリストのサイズである場合、2^n 個のサブセットがあることに注意してください。そのため、n が大きすぎなくても、多くのファイルが存在します。このような状況では、ディスク容量が十分に大きくても、ディレクトリ内にあまりにも多くのファイルがあることを好まないファイルシステムに問題がある可能性があります。したがって、それらを別のディレクトリに配置するか (コードを少し変更する必要があります)、別の方法に頼るのが賢明かもしれません。

于 2013-01-17T10:27:17.813 に答える