Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,对RAM而言,排列列表太大_Python_Permutation_Ram_Itertools - Fatal编程技术网

在Python中,对RAM而言,排列列表太大

在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

我已经编写了一个程序,从文本文件中读取一个单词列表(每行一个单词),并在编写一个排列输出文件(每行一个)之前,将它们组合起来生成每一个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
添加到输出文件的最后一行

for item in [x for x in itertools.permutations(wordList, 3)]:
这条线没有任何好处,只会引起问题。如果不生成列表,它将使用生成器根据请求创建下一个排列。通过将此调用包装在列表理解中,您就是在生成该列表,并确保所有排列同时存在于内存中。这就违背了使用发电机的初衷。您应该将该行更改为:

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

你的问题是什么?如果要写入文件,请查看io模块和open()方法。如果不想为最后一行写入\n,请将其剥离,或者在使用迭代器时,在迭代的开始而不是结束时包含\n。