在Python中没有重复的排列

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].我只想要其中一个.我怎样才能摆脱这些重复?

Pet*_*Guo 7

Set 非常适合这个,因为 set 不包含任何重复的元素:

set(permutations(p))
Run Code Online (Sandbox Code Playgroud)

  • 这是非常低效的,对于较大的数字会被挂起,并且对于较高的数字会出现大量的重复 (3认同)

Ry-*_*Ry- 6

您可以获取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)