在处理python列表赋值时最小化内存消耗

时间:2015-06-24 14:33:14

标签: python algorithm memory

我有两个高维的整数列表。每个列表的维度超过200000.我的任务是这样的: 给出两个清单

a = [None, 0, None, None, 0, None, None, None, 0, None, None, None, None, None, 0,...]
b = [7 1 4 8 2 1 1 1 1 6 1 6 1 4 4 1 1 6 6 7 4 4 7 5...]

None的数量等于b的长度

我的问题是如何使用 最小内存替换None中每个元素a的所有b

我的方法是

j = 0
for i in range(len(a)):
    if a[i] == None:
        while j < len(b):   
            a[i] = b[j]
            break
        j = j+1   

由于我的程序消耗大量内存,我真的需要节省内存使用。在这种情况下,你能否就如何保存记忆给我一些想法?

1 个答案:

答案 0 :(得分:3)

您可以从.then()创建一个迭代器,然后在列表推导中,如果b的当前元素是a,您可以None获取下一个项目。

next(b_iter)

作为一个例子

b_iter = iter(b)
a = [next(b_iter) if i is None else i for i in a]