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

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, [])))