Python 元素限制在某些位置的集合的置换数
假设我有一个数字组合Python 元素限制在某些位置的集合的置换数,python,permutation,Python,Permutation,假设我有一个数字组合[1,3,5,0,9]。如果0不在第一个位置,如何计算组合的排列数?此外,组合中可能有多个0 将您的问题直译成python代码将是: >>> from itertools import permutations >>> len([x for x in permutations((1, 3, 5, 0, 9)) if x[0]!=0]) 96 但请注意,这实际上计算了所有排列,当序列足够长时,这将花费很长时间 如果您感兴趣的是符合您的限制条
[1,3,5,0,9]
。如果0
不在第一个位置,如何计算组合的排列数?此外,组合中可能有多个0
将您的问题直译成python代码将是:
>>> from itertools import permutations
>>> len([x for x in permutations((1, 3, 5, 0, 9)) if x[0]!=0])
96
但请注意,这实际上计算了所有排列,当序列足够长时,这将花费很长时间
如果您感兴趣的是符合您的限制条件的可能排列的数量,那么最好通过组合考虑因素来计算该数量,如fredtantini所述。将您的问题直译为python代码将是:
>>> from itertools import permutations
>>> len([x for x in permutations((1, 3, 5, 0, 9)) if x[0]!=0])
96
但请注意,这实际上计算了所有排列,当序列足够长时,这将花费很长时间
如果您感兴趣的是符合您的限制条件的可能排列的数量,那么您最好通过组合考虑来计算该数量,如fredtantini所述。假设您正在谈论列表(集合是且不能有一个项目多次) 计算置换数是一个数学问题,不需要python也可以解决:一组长度为5的置换数是
5代码>。由于您不希望所有排列都以0开头,因此总数为5-4!=96
Python有一个带有排列函数的模块。您可以使用列表理解来过滤结果并计算长度:
>>>[l for l in permutations(list({1, 3, 5, 0, 9})) if l[0]!=0]
[(9, 0, 3, 5, 1), (9, 0, 3, 1, 5), ..., (1, 5, 3, 9, 0)]
>>>len([l for l in permutations(list({1, 3, 5, 0, 9})) if l[0]!=0])
96
假设您正在谈论列表(集合是并且不能有一个项目超过一次)
计算置换数是一个数学问题,不需要python也可以解决:一组长度为5的置换数是5代码>。由于您不希望所有排列都以0开头,因此总数为5-4!=96
Python有一个带有排列函数的模块。您可以使用列表理解来过滤结果并计算长度:
>>>[l for l in permutations(list({1, 3, 5, 0, 9})) if l[0]!=0]
[(9, 0, 3, 5, 1), (9, 0, 3, 1, 5), ..., (1, 5, 3, 9, 0)]
>>>len([l for l in permutations(list({1, 3, 5, 0, 9})) if l[0]!=0])
96
如果我能够理解您的问题,那么以下逻辑应该有效:
a = [1, 3, 5, 0, 9]
import itertools
perm = list(itertools.permutations(a))
perm_new = []
for i in range(len(perm)):
if perm[i][0] != 0:
perm_new.append(perm[i])
如果我能够理解您的问题,那么以下逻辑应该有效:
a = [1, 3, 5, 0, 9]
import itertools
perm = list(itertools.permutations(a))
perm_new = []
for i in range(len(perm)):
if perm[i][0] != 0:
perm_new.append(perm[i])
一个集合不能有多个0。根据定义,一个元素在一个集合中只存在一次。@Ffisegydd我的错误。我已经更新了帖子。@planetp没问题,好吧,ch3ka的答案即使对于列表也是有效的:)有n代码>排列,(n-1)其中的代码>以某个元素开头。所以结果是n!-x(n-1)代码>其中x是零的数目。一个集合不能有多个0。根据定义,一个元素在一个集合中只存在一次。@Ffisegydd我的错误。我已经更新了帖子。@planetp没问题,好吧,ch3ka的答案即使对于列表也是有效的:)有n代码>排列,(n-1)其中的代码>以某个元素开头。所以结果是n!-x(n-1)
其中x是零的数目。permutations()
适用于任何iterable-您不需要强制转换到列表
。此外,不建议命名变量l
。而且,我已经回答了;)permutations()
适用于任何iterable-您不需要强制转换到列表
。此外,不建议命名变量l
。而且,我已经回答了;)