扩展列表时出现内存错误
memory error while extending lists
我有这样一个列表:
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
如何解决这个问题?
首先,我不确定这是否可行。
我使用 generator
to avoid having all your lists in memory. And using 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]]]
我有这样一个列表:
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
如何解决这个问题?
首先,我不确定这是否可行。
我使用 generator
to avoid having all your lists in memory. And using 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]]]