簡體   English   中英

Python語句使用過多的RAM

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM