【发布时间】:2019-12-22 16:19:07
【问题描述】:
彩票中奖者需要从以下指定的数组中下注 6 个号码。
提取可能的组合 - 代码由两部分组成:
第 1 阶段 - 获取所有排列:
a = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37]
combinations = tuple(itertools.permutations(a, 6))
第 2 阶段 - 扣除所有组合:
我从另一个帖子 here 获得了一些帮助来删除任何此类重复项,因为在彩票中,[1,3,5] 的组合类似于投注[5,1,3]。
机器已启动,但在第一阶段结束前内存不足。
我知道你们中的大多数人会建议升级到 64 位等,但我正在寻找更有效的代码来处理我当前机器上的必要结果。主要用于学习目的。
非常感谢您的回复!
【问题讨论】:
-
我们看不到的代码很难调试。
-
不确定您在这里尝试输出什么?长度为 6 的 38 个唯一项的列表有 19 亿个排列,因此您的代码试图生成 19 亿个列表,这就是内存不足的原因。
-
顺便说一句,您的代码内存不足,试图为 1,402,410,240 个数字元组分配足够的内存,然后对其进行过滤。在我的 Python 3.7 上,每个这样的元组消耗 104 个字节,因此您至少需要 145 GB 的内存。
-
请考虑提出好问题的准则:stackoverflow.com/help/how-to-ask
标签: python