扩展列表时出现内存错误

时间:2017-08-11 11:31:48

标签: python list extend

我有这样的清单:

mylist=[[[1,2,3,...,200],[1,2,3,...,200],[1,2,3,...,200],[1,2,3,...,40]],...]

我想合并mylist中每个项目的前三个列表,并且具有以下内容:

final_list=[[[1,2,3,...,600],[1,2,3,...,40]],...]

我已编写此代码来执行此操作:

def extend(mylist):
    a=mylist[0]
    b=mylist[1]
    c=mylist[2]
    a.extend(b)
    a.extend(c)
    return a

final_list=[]
for i in mylist:
    final_list.append([extend(i),i[3]])

当列表很小时它可以正常工作,但是当我想将三个200数组列表合并到一个600数组列表中时,我面对“MemorryError”:

    a.extend(c)
MemoryError

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

首先,我不确定这会起作用。

我使用generator创建了您的列表,以避免将所有列表都放在内存中。并且在连接子列表时使用itertools.chain来提高效率。

import itertools

mylist = [[[1, 2], [3, 4], [5, 6], [7, 8]]]

def contact_elements(huge_list):
  for i in huge_list:
    yield [list(itertools.chain(i[0], i[1], i[2])), i[3]]

final_list = [sub for sub in contact_elements(mylist)]
print(final_list) # [[[1, 2, 3, 4, 5, 6], [7, 8]]]