使用python

时间:2018-09-10 00:46:26

标签: python

我有下面的数字列表。我想使用Python生成这些数字(长度为9个数字)的所有非重复组合。

[1,2,3,4,5,7,9,10,11,12,13,14,15,19,21,23,24,25,26,27,28,30,31,32,33,34,35,36,37,38,40,41]

我尝试了下面的代码,但就像永远运行一样,我知道生成这些数字的组合会给系统带来负担,但我无法全力以赴,我对Python还是很陌生。

有人可以帮忙吗?这是我训练的任务。

from itertools import permutations 
perm = permutations([1,2,3,4,5,7,9,10,11,12,13,14,15,19,21,23,24,25,26,27,28,30,31,32,33,34,35,36,37,38,40,41], 9) for i in list(perm): 
    print (i)

1 个答案:

答案 0 :(得分:2)

您正在计算排列而不是组合。

[41, 39, 32][39, 41, 32]的集合不代表不同的组合(因为它们由相同的数字组成),但是代表不同的排列(因为顺序不同)。

如果您使用combinations而不是permutations,则代码将起作用。

 from itertools import combinations
 x = [1, 2,4] # your list of numbers
 comb_list = [i for i in combinations(x,9)]

感谢@DSM指出我的数学错误,这也是主要的编辑/删除操作。我也对排列组合感到困惑,并根据排列基础计算了大小!哎呀