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]