Python的方式来交叉并同时添加列表元素
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python的方式来交叉并同时添加列表元素,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1298字,纯文字阅读大概需要2分钟。
内容图文
![Python的方式来交叉并同时添加列表元素](/upload/InfoBanner/zyjiaocheng/745/2810d5401bd9481693ebbf1259821add.jpg)
我有3个列表,a,b和c
每个列表都包含3个数字的元组.
这是一个示例输入:
a = [(1,2,4),(1,7,8),(1,5,4),(3,6,7)]
b = [(1,2,5),(1,9,3),(1,0,3),(3,6,8)]
c = [(2,6,3),(2,4,9),(2,8,5),(1,2,7)]
我正在寻找一种方法来生成一个列表,如果每个元组的两个第一项是等于的,则获取这3个列表的元素,并添加第三个元素.
在我给出的数据中,只有一组元组,其中第一个值等于:(1,2,4),(1,2,5)和(1,2,7).
如果我添加他们的第三个值我有4 5 7 = 16,那么对于那些数据,我最后应该有[(1,2,16)].
每个列表中的两个第一个值是唯一的,[(1,2,7),(1,2,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, 2, 16)
或使用上述功能的单线程:
print filter(None, starmap(solve, product(a, b, c)))
#[(1, 2, 16)]
内容总结
以上是互联网集市为您收集整理的Python的方式来交叉并同时添加列表元素全部内容,希望文章能够帮你解决Python的方式来交叉并同时添加列表元素所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。