Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 元素限制在某些位置的集合的置换数_Python_Permutation - Fatal编程技术网

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
。而且,我已经回答了;)