按子列表项的总和拆分列表
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, [])))
我有一个包含文件名和大小的子列表列表。我需要根据每个拆分子列表的总文件大小必须小于 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, [])))