0

これを行う関数を作成しようとしています: N 桁のすべての 2 進数を並べ替えた順序で返します。各 2 進数はタプルとして表されます。AllBinary(N) を呼び出した結果は、2^N の 2 進数を含むタプルです。例:

AllBinary(2)
[(0, 0), (0, 1), (1, 0), (1, 1)]

for または while ループを使用して関数を記述しようとしています。これは私のコードです:

def AllBinary(N):
    c =[]
    for i in range(2**N):

ループでバイナリのタプルを作成し、それらを空のリスト c に追加することで、累積 for ループを使用して解決できると思います。しかし、これらのバイナリ タプルを取得するためにループをコーディングする方法がわかりません。

4

6 に答える 6

3
def AllBinary(N):
    import itertools
    return itertools.product((0, 1), repeat=N)

例:

>>> for t in AllBinary(3):
...    print t

(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-10-30T00:55:06.750 に答える
0

要求どおりに他の関数を使用しない再帰的な実装:

def all_bin(n):
    if n == 1:
        return [(0,), (1,)]
    return [(i, ) + b for i in (0, 1) for b in all_bin(n - 1)]
于 2013-10-30T00:56:34.410 に答える