我有下面的数字列表。我想使用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)
答案 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指出我的数学错误,这也是主要的编辑/删除操作。我也对排列组合感到困惑,并根据排列基础计算了大小!哎呀