我想列举所有可能的N-long零列表:[0,1,0,0,0,1,0,...]。所以,基本上是一个2 ^ N长的N长元素矩阵。如果N = 3,我会做以下事情:
M = []
for i in range(2):
for j in range(2):
for k in range(2):
M.append([i,j,k])
对于任意N(N <20),我需要一种更简单的方法。 感谢。
答案 0 :(得分:4)
如果你是itertools的粉丝(真的,谁不是?),你可以使用itertools.product
来获取二进制数字[0, 1]
的重复笛卡尔积。将repeat
参数设置为您想要的任何长度。
>>> import itertools
>>> length = 3
>>> for thing in itertools.product([0, 1], repeat=length): print(thing)
(0, 0, 0)
(0, 0, 1)
(0, 1, 0)
(0, 1, 1)
(1, 0, 0)
(1, 0, 1)
(1, 1, 0)
(1, 1, 1)
作为一般的经验法则,如果你发现自己嵌套了很多看似相似的循环,那么解决你的问题可能是更好的方法,包括使用itertools。
答案 1 :(得分:3)
def binstr(n):
if n == 0:
return [""]
else:
rec = binstr(n-1)
return ["0"+x for x in rec] + ["1"+x for x in rec]
答案 2 :(得分:2)
您可以按照以下方式执行此操作
M = []
for i in range ( 1<< N ):
tmp = i
bit_string=[]
for j in range(N):
bit_string.append(tmp%2)
tmp = tmp/2
M.append(bit_string)