【问题标题】:memory error while extending lists扩展列表时出现内存错误
【发布时间】:2018-01-19 21:50:49
【问题描述】:

我有这样一个清单:

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 数组列表时,我会遇到“MemoryError”:

    a.extend(c)
MemoryError

如何解决这个问题?

【问题讨论】:

标签: python list extend


【解决方案1】:

首先,我不确定这是否可行。

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

【讨论】:

    猜你喜欢
    • 2020-02-17
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2017-10-08
    相关资源
    最近更新 更多