0

每个二进制数都应该表示为一个元组。调用函数时,结果应该是一个包含 2^N 个二进制数的元组。

前任。二进制(2)----> ((0,0), (0,1), (1,0), (1,1))

我正在尝试使用 while 循环来执行此操作。

只是一些关于我可以从哪里开始的建议会很有帮助。

4

4 回答 4

3

你可以使用itertools.product,得到你想要的

print [item for item in itertools.product([0, 1], repeat = 4)]

输出

[(0, 0, 0, 0), (0, 0, 0, 1), (0, 0, 1, 0), (0, 0, 1, 1), (0, 1, 0, 0),
 (0, 1, 0, 1), (0, 1, 1, 0), (0, 1, 1, 1), (1, 0, 0, 0), (1, 0, 0, 1),
 (1, 0, 1, 0), (1, 0, 1, 1), (1, 1, 0, 0), (1, 1, 0, 1), (1, 1, 1, 0),
 (1, 1, 1, 1)]

将 更改repeat为所需的值。

编辑: 性能比较list和理解。

print timeit.timeit("[item for item in itertools.product([0, 1], repeat = 4)]", number = 1000000)
print timeit.timeit("list(itertools.product([0, 1], repeat = 4))", number = 1000000)

列表理解比list.

于 2013-10-24T02:29:00.073 回答
1

您可能需要两个循环——一个外部循环遍历值,一个内部循环处理每个值的二进制数字。

您可以将值作为整数循环并将它们转换为二进制 - 或者您可以在循环周围以二进制形式携带“当前值”,复制并增加它。

于 2013-10-24T02:01:46.327 回答
0
from numpy import binary_repr
[map(int, binary_repr(i, N)) for i in range(2**N)]
于 2013-10-24T04:07:42.083 回答
0

尝试这个:

def binary(n):
    num_digits = len(bin(n).replace('0b',''))

    all_bin_numbers=()

    for i in range(n):
        bin_num=()
        for digit in str(bin(i)).replace('0b','').rjust(num_digits, '0'):
            bin_num += (int(digit),)
        all_bin_numbers += (bin_num,)

    return all_bin_numbers

print binary(2)   

e:圣牛,itertools 回答。
e2:所以看来我没有完全阅读这个问题,我在想你想要所有的二进制数,包括你指定的 n。

于 2013-10-24T02:39:39.393 回答