python - 在python中根据条件索引添加子列表元素
问题描述
我有如下列表
a=[['a',1,2,1,3],['b',1,3,4,3],['c',1,3,4,3]]
b=[['b',1,3,4,3],['c',1,3,4,3]]
如果第一个子列表元素与其他列表子列表元素匹配,我想根据索引添加元素
尝试以下:
from operator import add
res_list1=[]
for a1 in a:
for b1 in b:
if a1[0]==b1[0]:
res_list = [map(add, a1[1:], b1[1:])]
res = [[a1[0],i,j,k,l] for i,j,k,l in res_list]
res_list1.append(res[0])
else:
res_list=a1
res_list1.append(res_list)
print res_list1
但输出结果如下:
res_list1=[['a', 1, 2, 1, 3], ['a', 1, 2, 1, 3], ['b', 2, 6, 8, 6], ['b', 1, 3, 4, 3], ['c', 1, 3, 4, 3], ['c', 2, 6, 8, 6]]
但正确的输出应该是:
res_list1=[['a', 1, 2, 1, 3], ['b', 2, 6, 8, 6], ['c', 2, 6, 8, 6]]
解决方案
这是一个itertools
基于的方法:
from operator import itemgetter
from itertools import groupby, islice
l = sorted(a+b)
[[k] + [sum(i) for i in islice(zip(*v),1,None)] for k,v in groupby(l, key=itemgetter(0))]
# [['a', 1, 2, 1, 3], ['b', 2, 6, 8, 6], ['c', 2, 6, 8, 6]]
推荐阅读
- django - 如何从一个 Django 实例运行多个站点?
- c# - 为什么我的角色不能总是运行他的移动动画?
- javascript - 将 d3 js 更新到新版本不起作用
- python - 如何使用 python 读取 Json 数据?
- google-chrome - 如何从 Chrome 的登录数据中解密密码
- javascript - 使用 Moment.js 将人类可读时间转换为 Unix 纪元时间
- html - 背景动画期间的白色闪烁
- algorithm - 两个循环的适当时间复杂度
- java - 带有 http 请求标头的 Spring Boot 分页
- python - 如何在不退出python的情况下退出python程序内部的c子程序