n個のエントリがあり、それぞれが0または1の値を取ることができるとしましょう。つまり、これらのエントリの可能な組み合わせは2^n個あります。エントリの数は1から6まで変化する可能性があります。
1000個のIFに頼ることなく、可能な各組み合わせを数列として(つまり、n = 2:00、01、10、11の場合)どのように作成できますか?
n個のエントリがあり、それぞれが0または1の値を取ることができるとしましょう。つまり、これらのエントリの可能な組み合わせは2^n個あります。エントリの数は1から6まで変化する可能性があります。
1000個のIFに頼ることなく、可能な各組み合わせを数列として(つまり、n = 2:00、01、10、11の場合)どのように作成できますか?
0..2^n-1
数値を2進数で印刷するだけで、これを実現できます。
intsを使用することもできます。
n = 5
for x in range(2**n):
print ''.join(str((x>>i)&1) for i in xrange(n-1,-1,-1))
クレイジーな10進数から2進数への変換は、この回答から解除されました。
出力:
00000
00001
00010
00011
00100
00101
00110
00111
01000
01001
01010
01011
01100
01101
01110
01111
10000
10001
10010
10011
10100
10101
10110
10111
11000
11001
11010
11011
11100
11101
11110
11111
数学的組み合わせのm番目の辞書式要素の生成。 リンク
そして、これはDON KNUTHによって確認する必要があります(可能なすべての組み合わせを生成します。注:C#コードも提供されています。)
各エントリの可能な値が0または1のみであり、0と1の組み合わせのみが必要な場合は、2 ^(n-1)までの自然整数(バイナリ形式)を使用してみませんか...提案されています上記のNick..で、文字列が必要な場合は「0」のパディングでフォーマットします。
または使用itertools
:
import itertools
for item in itertools.product((1, 0), repeat=4):
print item
この場合、アイテムは4つの要素のタプルであることに注意してください。