在Python中,对RAM而言,排列列表太大
我已经编写了一个程序,从文本文件中读取一个单词列表(每行一个单词),并在编写一个排列输出文件(每行一个)之前,将它们组合起来生成每一个3个单词的排列在Python中,对RAM而言,排列列表太大,python,permutation,ram,itertools,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 wordLi
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
添加到输出文件的最后一行
for item in [x for x in itertools.permutations(wordList, 3)]:
这条线没有任何好处,只会引起问题。如果不生成列表,它将使用生成器根据请求创建下一个排列。通过将此调用包装在列表理解中,您就是在生成该列表,并确保所有排列同时存在于内存中。这就违背了使用发电机的初衷。您应该将该行更改为:
for item in itertools.permutations(wordList, 3):
你的问题是什么?如果要写入文件,请查看io模块和open()方法。如果不想为最后一行写入\n,请将其剥离,或者在使用迭代器时,在迭代的开始而不是结束时包含\n。