我想创建一个列表,其中插入的零组合位置如下:
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时,代码非常耗时.
我认为这可能是在内存中建立中间结果的问题?我想知道有没有更好的方法来创建我需要的列表.谢谢.
以下函数返回包含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)
这与问题中的示例相同.
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |