如果第一个元素相同,则添加两个子列表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果第一个元素相同,则添加两个子列表相关的知识,希望对你有一定的参考价值。
我是python的初学者,如果子列表的第一个元素相同,我会尝试添加两个子列表。子列表的数量也不是常数。
我尝试遍历每个元素。但是,它再次与列表中的所有元素进行比较
在此处输入代码
Input_list = [['A', 50, 10, 10, 10], ['B', 50, 40, 30, 70], ['C', 50, 20, 40, 30], ['A', 20, 20, 20, 20]]
Expected_list = [['A', 70, 30, 30, 30], ['B', 50, 40, 30, 70], ['C', 50, 20, 40, 30]]
for i in range(0, len(Input_list)):
for j in range(0, len(Input_list)):
if Input_list[i][0] == Input_list[j][0]:
print("True")
答案
这里是一种方法:
from operator import add
input_list = [['A', 50, 10, 10, 10], ['B', 50, 40, 30, 70], ['C', 50, 20, 40, 30], ['A', 20, 20, 20, 20]]
out =
for l in input_list:
n = len(l)
key = l[0]
vals = [key] + list( map(add, l[1:n], out.get(key, [0]*n)[1:n]) )
out[key] = vals
这使用字典来跟踪子列表:
In [24]: out
Out[24]:
'A': ['A', 70, 30, 30, 30],
'B': ['B', 50, 40, 30, 70],
'C': ['C', 50, 20, 40, 30]
out.values()
产生您想要的东西:
In [25]: out.values()
Out[25]: dict_values([['A', 70, 30, 30, 30], ['B', 50, 40, 30, 70], ['C', 50, 20, 40, 30]])
另一答案
如果列表具有相同的键,则可以将列表转换为字典并添加值。
nested_lists = [['A', 50, 10, 10, 10], ['B', 50, 40, 30, 70], ['C', 50, 20, 40, 30], ['A', 20, 20, 20, 20]]
dict =
for _list in nested_lists:
key = _list[0]
val = _list[1: ]
if key in dict:
dict[key] = [a + b for a, b in zip(dict[key], val)]
dict.setdefault(key, val)
以上是关于如果第一个元素相同,则添加两个子列表的主要内容,如果未能解决你的问题,请参考以下文章