如何在Python中枚举所有可能的N长的0和1的组合?
我想列举所有可能的N长的0和1的列表:[0,1,0,0,0,1,0,…]。基本上是一个由N个元素组成的2^N长矩阵。如果N=3,我将执行以下操作:如何在Python中枚举所有可能的N长的0和1的组合?,python,combinations,enumeration,Python,Combinations,Enumeration,我想列举所有可能的N长的0和1的列表:[0,1,0,0,0,1,0,…]。基本上是一个由N个元素组成的2^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你可以这样做 M = [] for i in range ( 1
M = []
for i in range(2):
for j in range(2):
for k in range(2):
M.append([i,j,k])
我需要一个更简单的方法来处理任意N(N你可以这样做
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)
M=[]
对于范围内的i(1如果您是itertools的粉丝(实际上,谁不是呢?),您可以使用获取二进制数字的重复笛卡尔积[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
>>> 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)