【问题标题】:Sum lists with different lengths in pythonpython中不同长度的求和列表
【发布时间】:2018-04-21 14:36:22
【问题描述】:

我有 3 个不同长度的列表。它们是这样制作的:

final_list = [[1230, 0], [1231,0],[1232,0], [1233, 0], [1234, 0]]

list2 = [[1232, 20], [1233, 30]]
list3 = [[1230, 10], [1231,20],[1232,40]]

我想像这样获得final_list:

final_list = [[1230, 10], [1231,20],[1232,60], [1233, 30], [1234, 0]]

(如果考虑到 list2 和 list3 的每个元素,它的第一个值等于最终列表的第一个元素之一,那么最终列表的对应元素的第二个值必须等于找到元素。)

【问题讨论】:

  • 追加、排序、分组、添加。
  • 你也很想用字典来代替

标签: python python-2.7 python-3.x subprocess


【解决方案1】:

不是一个干净的解决方案,但易于掌握,可能会节省您的时间。

f = {}
dcts = map(lambda l: dict([l]), list2+list3)
for dct in dcts:
    for k in dct.iterkeys():
        f[k] = w.get(k, 0) + d[k]
final_list = map(list, f.items())

不过,如果你熟悉itertools

import groupby from itertools

merged = list2+list3
final_list = []

for key, group in groupby(merged, key = lambda e: e[0]):
    final_list.append([key, sum(j for i, j in group)])

或单排

[[k, sum(j for i, j in g)] for k, g in  groupby(list3+list2, key = lambda e: e[0])]

【讨论】:

    【解决方案2】:

    我创建了一个temp_list 并将所有三个列表都附加到它上面。 创建一个字典 dic 并循环遍历 temp_list 以根据键总结每个元组。 然后我将dic 转回列表并对其进行排序。

    我承认这不是最有效的方法。但这是一个解决方案。

    temp_list = []
    temp_list.append(final_list)
    temp_list.append(list2)
    temp_list.append(list3)
    
    dic = {}
    
    for lst in temp_list:
        for tp in lst:
            if tp[0] in dic:
                dic[tp[0]] = dic[tp[0]] + tp[1]
            else:
                dic[tp[0]] = tp[1]
    
    result = []
    
    for key, value in dic.iteritems():
        temp = [key,value]
        result.append(temp)
    
    result.sort()
    

    结果:

    [(1230, 10), (1231, 20), (1232, 60), (1233, 30), (1234, 0)]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-07
      • 2017-12-04
      • 2020-06-27
      • 1970-01-01
      • 1970-01-01
      • 2017-11-30
      • 2017-12-24
      • 1970-01-01
      相关资源
      最近更新 更多