43

nPython では、バイナリ値0とのすべての組み合わせを取得するにはどうすればよい1ですか?

たとえばn = 3、私がしたい場合

[ [0,0,0], [0,0,1], [0,1,0], [0,1,1], ... [1,1,1] ]  #total 2^3 combinations

これどうやってするの?

4

3 に答える 3

82

使用するitertools.product

import itertools
lst = list(itertools.product([0, 1], repeat=3))

これにより、タプルのリストが生成されます (こちらを参照)

これを変数を使用するように簡単に変更できますrepeat

n = 3
lst = list(itertools.product([0, 1], repeat=n))

リストのリストが必要な場合は、map関数を使用できます(@Aestheteに感謝します)。

lst = map(list, itertools.product([0, 1], repeat=n))

または Python 3 の場合:

lst = list(map(list, itertools.product([0, 1], repeat=n)))
# OR
lst = [list(i) for i in itertools.product([0, 1], repeat=n)]

または リスト内包表記を使用すると、オブジェクトmapを反復処理してリストを生成するため、製品をリストに変換する必要がないことに注意してください。itertools.product

于 2013-02-18T08:05:26.710 に答える
15

組み込み関数やスマートなテクニックを使用しなくても、このようにすることができます。

def per(n):
    for i in range(1<<n):
        s=bin(i)[2:]
        s='0'*(n-len(s))+s
        print (map(int,list(s)))
per(3)       

出力

[0, 0, 0]
[0, 0, 1]
[0, 1, 0]
[0, 1, 1]
[1, 0, 0]
[1, 0, 1]
[1, 1, 0]
[1, 1, 1]
于 2013-02-18T08:44:35.073 に答える
4

以下は、そのようなすべての組み合わせを提供します

bin = [0,1]
[ (x,y,z) for x in bin for y in bin for z in bin ]
于 2013-02-18T08:05:57.027 に答える