[英]Python statement uses excessive amounts of RAM
這個簡單的陳述:
zip(xrange(0, 11614321), xrange(0, 11627964))
......吃掉了我的大部分內存。 (> 150 MiB!)為什么?
編輯:啊,重新閱讀文檔,我看到zip
返回一個列表,而不是一個可迭代的。 像zip
那樣返回一個可迭代的東西?
更大的圖片:我正在迭代兩個大的文件數據數組,我正在做迭代(0-end,0-end),(0-end,1-end)等等。我喜歡不切片數組,因為它會導致過多的內存分配。 我想我只是迭代索引,但這似乎不起作用,如上所述。 整個代碼:
def subsequence_length(data_a, data_b, loc_a, loc_b):
length = 0
for i_a, i_b in zip(xrange(loc_a, len(data_a)), xrange(loc_b, len(data_b))):
if data_a[i_a] == data_b[i_b]:
length += 1
else:
break
return length
使用itertools中的izip
如果由於某種原因你不想使用itertools
模塊,那么編寫你自己的迭代器就可以做同樣的事情,至少如果你知道你正在處理兩個輸入迭代器。
def xzip2(i1, i2):
i1, i2 = iter(i1), iter(i2)
while True:
yield next(i1), next(i2)
實際上,經過進一步反思,使其與任意數量的迭代器一起工作並不困難。 我相當確定itertools.izip
必須實現這樣的東西。
def xzip(*iters):
iters = [iter(i) for i in iters]
while True:
yield tuple([next(i) for i in iters])
(看看文檔 ,我看到它是,除了他們使用map
而不是列表推導。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.