为了账号安全,请及时绑定邮箱和手机立即绑定

Python:如何从函数中拆分并返回列表以避免内存错误

Python:如何从函数中拆分并返回列表以避免内存错误

繁星淼淼 2021-03-28 13:33:57
我目前正在使用一个枚举特定数组(一个有向图)中的所有循环的函数,我需要它们全部。此函数以列表列表的形式返回所有循环(每个子列表是一个循环,例如,result = [[0,1,0],[0,1,2,0]]是一个包含2个以节点开头和结尾的循环的列表) 0)。但是,有数百万个循环,因此对于大图,我会遇到内存错误(MemoryError:MemoryError()),因为包含所有循环的列表列表太大。我希望函数将结果分成几个数组,这样就不会出现内存错误。那可能吗?并能解决问题吗?我试图通过将结果数组拆分为子结果列表来做到这一点(子结果的最大大小为1000万,这比此处说明的5亿最大大小还小:Python数组可以得到多大?) 。这个想法是结果是一个包含子结果的列表:result = [sub-result1,sub-result2]。但是,我得到了另一个内存错误:新解析器没有内存。我这样做的方式如下:if SplitResult == False:    result = [] # list to accumulate the circuits found    # append cycles to the result list    if cycle_found(): #cycle_found() just for example        result.append(new_cycle)elif SplitResult == True:    result = [[]] # list of lists to accumulate the circuits found    # append cycles to the LAST result SUB-lists    if cycle_found(): #cycle_found() just for example        result[len(result)-1].append(new_cycle)    # create a new sublist when the size of the LAST result SUB-lists    # reaches the size limit (ResultSize)           if len(result[len(result)-1]) == ResultSize:        result.append([])也许问题是我将所有子结果合并到结果列表中。在那种情况下,如何从函数返回可变数量的结果?特别是,我将一个12节点完整有向图的所有简单周期划分为1000万个周期的子列表。我知道总共有115,443,382个周期,所以我应该得到一个包含16个子列表的列表,前15个包含1000万个周期,最后一个包含443,382个周期。取而代之的是,我得到了另一个内存错误:新解析器没有内存。此过程适用于11个节点的完整图,该图返回2个子列表,第一个包含1000万个循环(10000000),另一个包含976184。如果有帮助,它们的内存占用量为>>> sys.getsizeof(cycles_list[0])40764028>>> sys.getsizeof(cycles_list[1])4348732然后,我想我们应该添加列出的每个循环的大小:>>> sys.getsizeof(cycles_list[0][4])56>>> cycles_list[0][4][0, 1, 2, 3, 4, 0]任何帮助将是最欢迎的,
查看完整描述

2 回答

  • 2 回答
  • 0 关注
  • 197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信