在 python 中使用组合来处理非常大的序列

h_u*_*ser 2 python memory combinations

我正在尝试确定 87 个不同字符串的所有组合,这些组合可以组成 29 个元素的序列。我在 python 中使用组合来执行此操作,如果序列只有 4 个元素长,但它无法处理 29 个元素,则效果很好。这是我正在使用的代码:

combos = itertools.combinations(testv, 29)

usable_combos = []
for i in combos:
    usable_combos.append(i)
Run Code Online (Sandbox Code Playgroud)

但代码在循环阶段失败。我认为这是某种内存问题,但我不知道如何解决它。有什么建议么?

Mar*_*ers 5

您正在尝试将大量元组填充到此处的列表中。准确地说,有101.416.867.967.028.166.758.360 个不同的元组。这个数字太大了,我什至不知道如何拼写,但你可以从101 和几乎六分之一开始作为近似值。

当你对 4 个元素进行组合时,只有2,225,895 种不同的组合(略多于 200 万种),这是相当容易管理的,但你将其推到了大多数计算机根本无法同时存储在内存中的水平。

与其将所有内容添加到列表中,然后使用该列表,不如在循环时处理这些组合:

for i in combos:
     # process i, move on
Run Code Online (Sandbox Code Playgroud)

或者找到一种不同的方法来解决您的问题,该方法不涉及循环所有可能的组合。也许有一些方法可以减少您实际需要考虑的组合数量?

顺便说一句,您可以使用以下内容,而不是使用for循环 and :list.append()

combos = itertools.combinations(testv, 4)
usable_combos = list(combos)
Run Code Online (Sandbox Code Playgroud)

创建您的列表。