每个二进制数都应该表示为一个元组。调用函数时,结果应该是一个包含 2^N 个二进制数的元组。
前任。二进制(2)----> ((0,0), (0,1), (1,0), (1,1))
我正在尝试使用 while 循环来执行此操作。
只是一些关于我可以从哪里开始的建议会很有帮助。
每个二进制数都应该表示为一个元组。调用函数时,结果应该是一个包含 2^N 个二进制数的元组。
前任。二进制(2)----> ((0,0), (0,1), (1,0), (1,1))
我正在尝试使用 while 循环来执行此操作。
只是一些关于我可以从哪里开始的建议会很有帮助。
你可以使用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
.
您可能需要两个循环——一个外部循环遍历值,一个内部循环处理每个值的二进制数字。
您可以将值作为整数循环并将它们转换为二进制 - 或者您可以在循环周围以二进制形式携带“当前值”,复制并增加它。
from numpy import binary_repr
[map(int, binary_repr(i, N)) for i in range(2**N)]
尝试这个:
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。