Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中枚举所有可能的N长的0和1的组合?_Python_Combinations_Enumeration - Fatal编程技术网

如何在Python中枚举所有可能的N长的0和1的组合?

如何在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

我想列举所有可能的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<< 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)