我使用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