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

时间:2015-01-13 20:57:52

标签: python memory combinations

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

combos = itertools.combinations(testv, 29)

usable_combos = []
for i in combos:
    usable_combos.append(i)

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

1 个答案:

答案 0 :(得分:4)

您正在尝试将大量元组填入此列表中。确切地说,101.416.867.967.028.166.758.360 different tuples。一个数字如此之大,我甚至不知道如何拼出来,但你可以从101 and almost a half sextillion开始作为近似值。

当你组合4个元素时,只有2.225.895 different combinations(略多于200万),这是一个非常易于管理的东西,但是你把它推到了大多数计算机根本无法一次性存储在内存中的水平

不是将所有内容添加到列表中,而是使用该列表,您最好在循环时处理这些组合

for i in combos:
     # process i, move on

或找到解决问题的不同方法,不涉及循环所有这些可能的组合。也许有办法减少你实际需要考虑的组合数量?

顺便说一句,您可以使用for循环和list.append(),而不是使用combos = itertools.combinations(testv, 4) usable_combos = list(combos) 循环:

{{1}}

创建列表。