我如何从itertools.permutations中取出一个元素?

问题描述 投票:0回答:1
from itertools import permutations
perms = permutations("hello",5)

这给了我一个我不明白的怪异<>。似乎行得通]

for i in perms:
    print(i)

但是我不想遍历所有排列,因为其中有很多。所以我希望能够做类似的事情

perms[index]

给出(“ h”,“ e”,“ l”,“ l”,“ o”)。但这打破了,因为它“不可下标”。那么如何从中得到(“ h”,“ e”,“ l”,“ l”,“ o”)?谢谢!

python python-3.x permutation itertools
1个回答
0
投票

[如果要按字典顺序获得序列的nth置换而不必生成所有序列,则可以使用改编自here的代码段:

from functools import reduce

def Factorial (n):
    return reduce(lambda x, y: x * y, range(1, n + 1), 1)

def GetNthPermutation (seq, index):
    seqc = list(seq[:])
    result = []
    fact = Factorial(len(seq))
    index %= fact
    while seqc:
        fact = fact // len (seqc)
        choice, index = index // fact, index % fact
        result += [seqc.pop(choice)]
    return result

您可以这样使用:

>> print(GetNthPermutation(list("hello"), 3))
['h', 'e', 'l', 'o', 'l']
© www.soinside.com 2019 - 2024. All rights reserved.