具有限于某些位置的元素的集合的排列数

时间:2014-10-20 09:02:16

标签: python permutation

假设我有一组数字[1, 3, 5, 0, 9]。如何计算0不在第一个位置的组合的排列数?此外,组合中可能有多个0

3 个答案:

答案 0 :(得分:4)

将问题直译成python代码将是:

>>> from itertools import permutations
>>> len([x for x in permutations((1, 3, 5, 0, 9)) if x[0]!=0])
96

但请注意,这实际上计算了所有排列,这在序列变得足够长时需要很长时间。

如果您感兴趣的是符合您限制的可能排列数量,那么您最好通过fredtantini提到的组合考虑来计算这个数字。

答案 1 :(得分:1)

假设您正在谈论列表(集合为not ordered且不能多次出现项目。)

计算排列数是一个数学问题,可以在没有python的情况下进行处理:一组长度为5的排列数为5!。由于您不希望所有以0开头的排列,因此总数为5!-4!=96

Python具有带有置换函数的模块itertools。您可以使用列表推导来过滤结果并计算长度:

>>>[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

答案 2 :(得分:1)

如果我能够理解您的问题,那么以下逻辑应该有效:

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])