这是一个说明性示例,显示如何列出仅选择 6 个数字的游戏的组合:
>>> from itertools import combinations
>>> list(combinations(range(1, 6+1), 5))
[(1, 2, 3, 4, 5), (1, 2, 3, 4, 6), (1, 2, 3, 5, 6), (1, 2, 4, 5, 6),
(1, 3, 4, 5, 6), (2, 3, 4, 5, 6)]
以下是“前 5 个”组合数量的示例:
>>> len(list(combinations(range(1, 59+1), 5)))
5006386
如果您想要整个列表,只需删除该len()
功能。
要获得 4 中选择 2 和 5 强力球的所有组合,需要采用两种组合的卡蒂斯乘积:
>>> list((x,y) for x in combinations(range(1,4+1),2) for y in range(1,5+1))
[((1, 2), 1), ((1, 2), 2), ((1, 2), 3), ((1, 2), 4), ((1, 2), 5), ((1, 3), 1), ((1, 3), 2), ((1, 3), 3), ((1, 3), 4), ((1, 3), 5), ((1, 4), 1), ((1, 4), 2), ((1, 4), 3), ((1, 4), 4), ((1, 4), 5), ((2, 3), 1), ((2, 3), 2), ((2, 3), 3), ((2, 3), 4), ((2, 3), 5), ((2, 4), 1), ((2, 4), 2), ((2, 4), 3), ((2, 4), 4), ((2, 4), 5), ((3, 4), 1), ((3, 4), 2), ((3, 4), 3), ((3, 4), 4), ((3, 4), 5)]
即使数字很小,您也可以看到组合增长的速度有多快!
要获得所有强力球组合将是:
>>> list((x,y) for x in combinations(range(1,59+1),2) for y in range(1,35+1))
但它对我的系统来说太大了。
添加 DSM 的评论:
使用产品创建生成器:
from itertools import combinations, product
cgen = product(combinations(range(1,59+1),5), range(1,35+1))
for c in cgen:
#write c to file
或者您可以在写入文件之前收集一些 c。
每个组合将是以下形式的元组:((1, 2, 3, 4, 5), 1)