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

2024-04-19 04:35:08 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 方法inlt元素列表forrange矩阵
3条回答

如果你是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。你知道吗

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]

你可以这样做

         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)

相关问题 更多 >