我编写了一个程序来读取文本文件中的单词列表(每行一个单词)并将它们组合起来,在写入排列的输出文件之前产生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
添加到输出文件的最后一行?
答案 0 :(得分:3)
for item in [x for x in itertools.permutations(wordList, 3)]:
这条线没有任何好处,只会造成问题。 permutations()
不生成一个列表,它使用一个生成器,根据请求创建下一个排列。通过将此调用包装在列表推导中,您生成该列表并确保一次在内存中存在所有排列。这首先打破了使用发电机的重点。您应该将该行更改为:
for item in itertools.permutations(wordList, 3):