如何将多个等长列表合并为同尺寸列表,保留索引位置对应有效值
合并多列表并保留索引对应值
需求:合并多个列表,生成新列表,保留所有非零有效值,同时保留原索引位置的零值,确保每个索引位置的结果与原列表对应位置的有效值一致(每个索引在所有输入列表中最多仅有一个非零值)。
输入列表:
list1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0] list2 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12] list3 = [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] list4 = [0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0] list5 = [0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0] list6 = [0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0] list7 = [0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0] list8 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] list9 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] list10 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] list11 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] list12 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
解决方案
利用zip(*all_lists)将所有列表按索引位置打包,对每个位置的所有元素求和(因每个位置最多一个非零值,求和后即为该位置的有效值,零值保持不变):
# 整合所有输入列表 all_lists = [list1, list2, list3, list4, list5, list6, list7, list8, list9, list10, list11, list12] # 按索引求和生成结果 results = [sum(items) for items in zip(*all_lists)]
最终结果
results = [1,0,0,4,5,6,7,0,0,0,11,12]
内容的提问来源于stack exchange,提问作者jennytrinh96
相关产品推荐
相关产品推荐

