每个列表都包含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,starmapdef 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)]总结
以上是内存溢出为你收集整理的Python的方式来交叉并同时添加列表元素全部内容,希望文章能够帮你解决Python的方式来交叉并同时添加列表元素所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)