排列列表对于Python中的RAM来说太大了

时间:2014-07-22 14:56:01

标签: python permutation ram itertools

我编写了一个程序来读取文本文件中的单词列表(每行一个单词)并将它们组合起来,在写入排列的输出文件之前产生3个单词的每个排列,每行一次。

import itertools

wordList = open("wordlist.txt", "r").readlines() # import words into list
wordListOut = open("output.txt", "w")

wordList = [item.rstrip() for item in wordList] # strip \n from list items
for item in [x for x in itertools.permutations(wordList, 3)]:
    wordListOut.write("".join("%s %s %s\n" % item))

wordListOut.close()

它似乎完成了这项工作,但我担心的是整个文本存储在列表中的RAM中,而itertools.permutations()在RAM中生成元组列表,而没有非常大的wordlist.txt它会很快耗尽记忆。

如果将每个排列直接写入输出文件而不是保存在RAM中会更好,并且根据wordlist.txt的大小,最好不要将整个内容加载到RAM中。

另外,如何避免将\n添加到输出文件的最后一行?

1 个答案:

答案 0 :(得分:3)

for item in [x for x in itertools.permutations(wordList, 3)]:

这条线没有任何好处,只会造成问题。 permutations() 生成一个列表,它使用一个生成器,根据请求创建下一个排列。通过将此调用包装在列表推导中,生成该列表并确保一次在内存中存在所有排列。这首先打破了使用发电机的重点。您应该将该行更改为:

for item in itertools.permutations(wordList, 3):