【问题标题】:Printing the combinations list results in MemoryError [duplicate]打印组合列表会导致 MemoryError [重复]
【发布时间】:2018-07-15 06:18:56
【问题描述】:

我有一个由 80 个单元组成的矩阵。我的目标是测试每种可能的组合,其中每种组合的长度为 8 个单元格。

例如,其中一种可能的组合是 [0, 1, 2, 3, 4, 5, 6, 7]

我试图使用以下代码来打印这些组合中的每一个,但我得到的只是一个 MemoryError:

comb = combinations(range(80), 8)
for i in list(comb):
    print(i)

我的目的是实际获取 i(每个组合)并将其设置在我的设备中并验证它是否正常工作。 print(i) 只是为了验证我做对了,并查看了一些组合。

有没有更高效的方式来完成这种任务?

顺便说一下,我知道我计划测试 2.898753715E+10 种组合。

【问题讨论】:

  • 你几乎是对的,因为在底线我正在处理一个包含所有组合的列表。但是,我的主要兴趣不是列表(数组),而是以某种方式扫描所有可能的组合。除了使用 itertools.combinations() 之外,我不知道其他生成所有可能选项的方法
  • 如果您的系统是 32 位的。我认为这不是您执行此类任务的正确方法。您可以细分列表并为每个列表设置阈值。他们一次打印每个列表。 py 提出这样的错误并没有错....

标签: python itertools


【解决方案1】:

您已经知道您的列表无法放入内存,而且您似乎并不需要内存中的所有组合,所以为什么不简单地删除对 list() 的调用?

for i in comb:
    set_and_test_if_functional(i)

这仍需要大约一年的时间来运行(假设您可以每毫秒测试一个组合),但不会导致内存问题。

【讨论】:

  • 这个解决方案对我来说已经足够好了。我同意存储这些选项是一种矫枉过正。有没有更有效的存储方式?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 2011-08-25
  • 2018-02-13
  • 2020-09-19
相关资源
最近更新 更多