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

时间:2015-02-26 00:51:27

标签: python combinations enumeration

我想列举所有可能的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),我需要一种更简单的方法。 感谢。

3 个答案:

答案 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)