Python的方式来交叉并同时添加列表元素
发布时间:2020-12-20 11:39:00 所属栏目:Python 来源:网络整理
导读:我有3个列表,a,b和c 每个列表都包含3个数字的元组. 这是一个示例输入: a = [(1,2,4),(1,7,8),5,(3,6,7)]b = [(1,5),9,3),8)]c = [(2,(2,4,9),8,7)] 我正在寻找一种方法来生成一个列表,如果每个元组的两个第一项是等于的,则获取这3个列表的元素,并添加第三个
我有3个列表,a,b和c
每个列表都包含3个数字的元组. 这是一个示例输入: a = [(1,2,4),(1,7,8),5,(3,6,7)] b = [(1,5),9,3),8)] c = [(2,(2,4,9),8,7)] 我正在寻找一种方法来生成一个列表,如果每个元组的两个第一项是等于的,则获取这3个列表的元素,并添加第三个元素. 在我给出的数据中,只有一组元组,其中第一个值等于:(1,5)和(1,7). 如果我添加他们的第三个值我有4 5 7 = 16,那么对于那些数据,我最后应该有[(1,16)]. 每个列表中的两个第一个值是唯一的,[(1,7),15)]将不存在. 问题是没有找到只有两个第一个值相等的元组,它很容易用列表理解来完成.但我仍然坚持寻找一种同时添加第三个值的pythonistic方法. 我可以这样做: elem_list = [] for elem in a: b_elem = [i for i in b if i[:-1] == elem[:-1]] c_elem = [i for i in c if i[:-1] == elem[:-1]] if len(b_elem) != 0 and len(c_elem) != 0: elem_list.append((elem[0],elem[1],elem[2]+b_elem[0][2]+c_elem[0][2])) 这给了我想要的输出,但它真的很长,这就是为什么我确定这是一种没有麻烦的Python方式,我只是想不出来. 解决方法
这是一种方法:
from itertools import product,starmap def solve(*tups): key = tups[0][:2] if all(x[:2] == key for x in tups): return key + (sum(x[2] for x in tups),) for p in product(a,b,c): out = solve(*p) if out: print out #(1,16) 或使用上述功能的单线程: print filter(None,starmap(solve,product(a,c))) #[(1,16)] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |