我使用itertools的排列来制作一个可能的句子组合列表的列表,但它似乎甚至在我的64GB机器上爆炸的内存很快。在内存管理方面,我不是最好的,所以我想了解如何让我的代码更好。如果我能计算出几千个这样的块的列表,那就太好了。现在我只能真正买得起10从itertools爆炸内存使用排列
import itertools
from os import sys
arq_in = sys.argv[1]
f1 = open(arq_in, 'r')
list_items = []
items = []
lines = f1.readlines()
for line in lines:
line =line.strip()
list_items.append(line)
for L in range(0, len(list_items)+1):
for subset in itertools.permutations(list_items, L):
items.append(subset)
output = "\n".join(" ".join(map(str,l)) for l in items)
print output
这里是我输入:
ah k l ih r ih ng hh w ae r
ah s eh k ih n d t w ih ch t
ah s iy k r ih t w ah r l d
ah s l iy p ih ng k ae p s l
ah v ay t ah m ah n ae n d
d aw n ih n b ih k ah r ih ng
d ey t ah p oy n t s ih n
ey jh ih n s iy hh ay ah r d ah
f ih ng g ah r hh ae d ah
ih g z ih s t ih n w ao r m
ih k s p r eh sh ih n ih n dh ah
ih n d ah l jh ih n ae n
ih n m ay ey jh ih n s iy
ih n v eh s t ih n b l ae k
ih z m eh zh ah r d ih n
m ae ch ih ng y aa r n ih n
r iy d ih ng ih n p uh r
s ah ch ah d ih z ae s t ah r
s ih s t ah m ae n d ae d
th r eh d m ae ch ih ng y aa r n
如果你只需要几千个,你有足够的时候打破你的循环。排列的数量将变得非常快。对于你在这里的输入数量,它会轻易超过你的记忆。另外,您的输入包含重复项,所以您将多次创建相同的排列。那是你要的吗? – BrenBarn