【发布时间】:2021-06-29 12:30:31
【问题描述】:
我们有两个长度可能不同的元组列表,如下所示:
list1 = [(15339456, 140), (15340320, 412), (15341184, 364), (15342048, 488),
(15342912, 272), (15343776, 350), (15344640, 301), (15345504, 159),
(15346368, 224), (15347232, 241), (15348096, 223), (15348960, 175)]
list2 = [(15339456, 1516), (15341184, 2046), (15342048, 2400), (15342912, 8370),
(15343776, 2112), (15344640, 1441), (15345504, 784), (15346368, 1391)]
每个元组的第一个元素是键并且在每个列表中是唯一的。我们不能假设密钥在两个列表中都存在。一个列表可以包含具有不在另一个列表中的键的元素。现在我们要总结元组的第二个值,如果它的键在两个列表中,否则我们取完整的元组。
结果:
[(15339456, 1656),
(15340320, 412),
(15341184, 2410),
...
]
通常使用zip 对列表进行汇总,例如:
for tup1, tup2 in zip(list1, list2):
sum_ = tup1[1] + tup2[1]
lst.append((tup1[0], sum_))
如果两个列表的长度相同并且每个键都存在于两个列表中,这将起作用,但情况并非如此。
在这个for 循环中建立条件有什么好的方法吗?或者可能是这个的pythonic解决方案?两个for 循环和元素比较似乎不太令人满意。
【问题讨论】:
-
所以你首先会遍历一个列表,而不是另一个列表,然后检查它的内部是否都相加,否则插入?对我来说似乎很穷
-
@mkrieger1 为什么第一次迭代添加到一个空列表?但是,要总结第二个列表的值,我仍然需要检查键是否在结果中,我不知道有任何操作可以为我做这件事。
-
如果每个列表中的每个键都是唯一的,则可以先将每个列表转换为字典,然后再应用stackoverflow.com/questions/11011756/…的解决方案。