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”)?谢谢!
[如果要按字典顺序获得序列的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']