Python 如何选择所有排列的

Python 如何选择所有排列的,python,arrays,algorithm,math,permutation,Python,Arrays,Algorithm,Math,Permutation,我想得到一个所有排列或排列列的列表,其中ith元素是k,len大于k,并标有n。应排列1..n中的整数列表。如何做到这一点 对于排列的第一个元素,它是平凡的。但是它如何适用于第i个元素?迭代n排列不是选项。警告:排列的长度是(n-1),而置换的总大小为O(n*(n-1)!) 首先,请注意,这个问题很容易转化为排名/列表排列。您所需要做的就是编写一个函数,它接受1..(n-1)的排列,并将其转换为符合您条件的排列,反之亦然。(单向只需增加排列中大于k的每个数字,并在ith位置插入k。向另一个方向移

我想得到一个所有排列或排列列的列表,其中
ith
元素是
k
,len大于
k
,并标有
n
。应排列
1..n
中的整数列表。如何做到这一点


对于排列的第一个元素,它是平凡的。但是它如何适用于
第i个
元素?迭代
n排列不是选项。

警告:
排列的长度是
(n-1)
,而
置换的总大小为O(
n*(n-1)!


首先,请注意,这个问题很容易转化为排名/列表排列。您所需要做的就是编写一个函数,它接受
1..(n-1)
的排列,并将其转换为符合您条件的排列,反之亦然。(单向只需增加排列中大于
k
的每个数字,并在
i
th位置插入
k
。向另一个方向移动
k
,并减少大于
k
的所有数字)

但排名/上市是一个众所周知的问题。有关多种语言的解决方案,请参见,其中包括三种Python语言


这个想法可以推广到更多的情况,比如第一种情况。您只需要先编写更一般的转换。

在本文中,“标记为
n
”到底是什么意思?
n
只是排列的长度,应该排列什么?从
1
n
的整数列表或其他什么?是的,我更新了描述配置
p[i]==k
仍然意味着您将拥有
(n-1)列表中的排列。如果
n太多,您确定
(n-1)
不是也太多了吗?@kaya3这只是在我的答案发布后在编辑问题时添加的。我看得出:)我错了,我应该检查一下时间戳。
import itertools
i,k,n = 1,5,10 #pick these
permutations = [p for p in itertools.permutations(list(range(1,n+1,1))) if p[i]==k]