Python的方式来交叉并同时添加列表元素

Python的方式来交叉并同时添加列表元素,第1张

概述我有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个列表的元素,并 我有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,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的方式来交叉并同时添加列表元素所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1193239.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存