Joe*_*mes 1 python python-itertools
我有N个位置,每个位置可以是0或1.我有1个固定数,我想在这N个位置置换这些固定数量的1.
from itertools import permutations
p = [0 for k in xrange(6)]
for k in xrange(0,3):
p[k] = 1
print(list(permutations(p)))
Run Code Online (Sandbox Code Playgroud)
但是上面的结果在列表中包含四个[0,0,0,1,1,1].我只想要其中一个.我怎样才能摆脱这些重复?
Set 非常适合这个,因为 set 不包含任何重复的元素:
set(permutations(p))
Run Code Online (Sandbox Code Playgroud)
您可以获取1的位置:
from itertools import combinations
def place_ones(size, count):
for positions in combinations(range(size), count):
p = [0] * size
for i in positions:
p[i] = 1
yield p
Run Code Online (Sandbox Code Playgroud)
在行动:
>>> list(place_ones(6, 3))
[
[1, 1, 1, 0, 0, 0],
[1, 1, 0, 1, 0, 0],
[1, 1, 0, 0, 1, 0],
[1, 1, 0, 0, 0, 1],
[1, 0, 1, 1, 0, 0],
[1, 0, 1, 0, 1, 0],
[1, 0, 1, 0, 0, 1],
[1, 0, 0, 1, 1, 0],
[1, 0, 0, 1, 0, 1],
[1, 0, 0, 0, 1, 1],
[0, 1, 1, 1, 0, 0],
[0, 1, 1, 0, 1, 0],
[0, 1, 1, 0, 0, 1],
[0, 1, 0, 1, 1, 0],
[0, 1, 0, 1, 0, 1],
[0, 1, 0, 0, 1, 1],
[0, 0, 1, 1, 1, 0],
[0, 0, 1, 1, 0, 1],
[0, 0, 1, 0, 1, 1],
[0, 0, 0, 1, 1, 1],
]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2017 次 |
最近记录: |