如果第一个元素相同,则添加两个子列表

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)

以上是关于如果第一个元素相同,则添加两个子列表的主要内容,如果未能解决你的问题,请参考以下文章

java怎么比较两个list是不是相同?

java 怎么比较两个list是不是相同

java怎么比较两个list是不是相同?

大数据第十九天

DrRacket 生成递归问题需要帮助

比较两个list里是不是有相同的元素