有没有更快的方法在python中创建(0,1)组合列表?

Jas*_* Yu 2 python

我想创建一个列表,其中插入的零组合位置如下:

l = [(0, 0, 0, 0, 1, 1),
     (0, 0, 0, 1, 0, 1),
     (0, 0, 0, 1, 1, 0),
     (0, 0, 1, 0, 0, 1),
     (0, 0, 1, 0, 1, 0),
     (0, 0, 1, 1, 0, 0),
     (0, 1, 0, 0, 0, 1),
     (0, 1, 0, 0, 1, 0),
     (0, 1, 0, 1, 0, 0),
     (0, 1, 1, 0, 0, 0),
     (1, 0, 0, 0, 0, 1),
     (1, 0, 0, 0, 1, 0),
     (1, 0, 0, 1, 0, 0),
     (1, 0, 1, 0, 0, 0),
     (1, 1, 0, 0, 0, 0)]
Run Code Online (Sandbox Code Playgroud)

我可以使用构造列表

[e for e in itertools.product(range(2), repeat=6) if sum(e)==2]
Run Code Online (Sandbox Code Playgroud)

但是,当参数repeat变大为20时,代码非常耗时.

我认为这可能是在内存中建立中间结果的问题?我想知道有没有更好的方法来创建我需要的列表.谢谢.

K. *_*uhr 7

以下函数返回包含1的所有n-tuples 的列表k.它可以在瞬间工作choose(50,2),例如:

def choose(n, k):
    if n < k or k < 0:
        return []
    elif n == 0:
        return [()]
    return \
        [(0,) + r for r in choose(n-1, k)] + \
        [(1,) + r for r in choose(n-1, k-1)]
Run Code Online (Sandbox Code Playgroud)

以下是输出choose(6,2):

>>> choose(6,2)
[(0, 0, 0, 0, 1, 1), 
 (0, 0, 0, 1, 0, 1), 
 (0, 0, 0, 1, 1, 0), 
 (0, 0, 1, 0, 0, 1), 
 (0, 0, 1, 0, 1, 0), 
 (0, 0, 1, 1, 0, 0), 
 (0, 1, 0, 0, 0, 1), 
 (0, 1, 0, 0, 1, 0),
 (0, 1, 0, 1, 0, 0),
 (0, 1, 1, 0, 0, 0), 
 (1, 0, 0, 0, 0, 1), 
 (1, 0, 0, 0, 1, 0), 
 (1, 0, 0, 1, 0, 0),
 (1, 0, 1, 0, 0, 0), 
 (1, 1, 0, 0, 0, 0)]
Run Code Online (Sandbox Code Playgroud)

这与问题中的示例相同.