0

我正在编写一个执行各种字符排列的 python 脚本。最终,脚本将因内存不足错误而崩溃,具体取决于我想要进行置换的深度。

我最初认为解决方案会清空列表并重新启动,但这样做会导致索引越界错误。

这是我目前的设置:

for j in range(0, csetlen):
    getJ = None
    for i in range(0, char_set_len):
        getJ = word_list[j] + char_set[i]
        word_list.append(getJ)

    csetlen = csetlen - j
    del word_list[j-1:]
    word_list.append(getJ)
    j=0

基本上,csetlen可以是一个非常大的数字(超过 100,000,000)。当然,我没有足够的内存。所以我试图找出如何缩小外for循环中的列表。如何优雅地做到这一点?

内存错误与word_list. 目前,我正在存储数百万种不同的排列;我需要能够“回收”一些旧的列表值。如何对 python 列表执行此操作?

4

1 回答 1

1

您想要的是一个按需生成值的迭代器(并且不将它们存储在内存中):

from itertools import product
getJ_iterator = product(wordlist[:csetlen], char_set[:char_set_len]) 

这等效于以下生成器函数:

def getJ_gen(first_list, second_list):
    for i in first_list:
        for j in second_list:
            yield (i, j)

getJ_iterator = getJ_gen(wordlist[:csetlen], char_set[:char_set_len])

您将像这样遍历对象:

for item in getJ_iterator:
    #do stuff

请注意,item在这种情况下,将是一个形式为 的元组(word, char)

于 2012-09-23T03:49:38.453 回答