加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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)]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读