7

True値とFalse値の行列を作成しようとしています。これは、指定された数の選択肢のすべての順列を示しています。したがって、5つの選択肢については、次の出力が得られます。

F F F F F
T F F F F
T T F F F
T T T F F
...
F T F F F
...

itertoolの順列と組み合わせを使用することを検討してきましたが、これらは位置がずれて機能し、重複をもたらす値ではありません。

この問題には標準的なアルゴリズムがあると確信していますが、その名前を見つけるのに苦労しています。

4

3 に答える 3

8

itertools.productを使用してください:

itertools.product([False,True],repeat=5)

itertools.product([False,True],repeat=2)

(False, False)
(False, True)
(True, False)
(True, True)
于 2011-08-12T21:06:42.910 に答える
4

のn次元デカルト積が必要なようです[False, True]

>>> print list(itertools.product(*(itertools.repeat((False, True), 3))))
[(False, False, False), (False, False, True), (False, True, False), 
 (False, True, True), (True, False, False), (True, False, True), 
 (True, True, False), (True, True, True)]

またはもっと簡潔に(フレデリックから盗む)

>>> print list(itertools.product((False, True), repeat=3))
[(False, False, False), (False, False, True), (False, True, False), 
(False, True, True), (True, False, False), (True, False, True), 
(True, True, False), (True, True, True)]
于 2011-08-12T20:58:25.413 に答える
2

これは、0から(2 ** n)-1までの整数の2進表現と同じ形式です。このような逆境に傾倒している場合は、str.format()を使用して整数をゼロが埋め込まれたバイナリ文字列として表し、次のようなひどいことを行うことで、文字列( "00101"の形式)をブールリストに強制することができます。

>>> n = 5
>>> for i in xrange(2**n):
...     [bool(int(j)) for j in ("{0:0>%db}" % n).format(i)]

上記のn次元デカルト積は、確かにこれについて考える正しい方法ですが、この方法で私はくすくす笑いました。

于 2011-08-12T21:17:15.403 に答える