假设我有一组数字[1, 3, 5, 0, 9]
。如何计算0
不在第一个位置的组合的排列数?此外,组合中可能有多个0
。
答案 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])