繁体   English   中英

按子列表项的总和拆分列表

[英]Split list by sum of sublist items

我有一个包含文件名和大小的子列表列表。 我需要根据每个拆分的子列表的总文件大小必须小于 500 000 000 字节的标准将该列表拆分为子列表。 我尝试了多种解决方案,但我找不到让它工作的方法。 我的最后一次尝试是这样的:

import functools
import operator

data = [["c:\example_path", 480000],["c:\example_path2", 500000], ...]

list_final = []

sum = 0
list_items_subset = []

for index, item in enumerate(data):

   sum += item[1]

   if sum < 500000000:

      list_items_subset.append(item[0])

   else:
      list_final.append(list_items_subset)

      sum = 0
      
      list_items_subset = []
      list_items_subset.append(item[0])
      sum += item[1]

print("len data init: ", len(data))
print("len items final: ", len(functools.reduce(operator.iconcat, list_final, [])))

list_final应该存储累积总和小于 500 000 000 字节的所有文件子列表。 在上面的代码中,虽然创建和插入了子列表,但我留下了不包含在任何地方的项目。

感谢您的任何建议!

这是你想要得到的吗?

import functools
import operator

data = [[r"c:\example_path", 480000], [r"c:\example_path2", 500000]] * 10000

list_final = []

total_size = 0
list_items_subset = []

for name, size in data:
    total_size += size
    if total_size < 500000000:
        list_items_subset.append(name)

    else:
        list_final.append(list_items_subset)
        total_size = 0
        list_items_subset = [name]
        total_size += size

list_final.append(list_items_subset)
print("len data init: ", len(data))
print(len(list_final))
print("len items final: ", len(functools.reduce(operator.iconcat, list_final, [])))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM