gpt4 book ai didi

同时交叉和添加列表元素的 Pythonistic 方法

转载 作者:太空宇宙 更新时间:2023-11-03 13:16:52 26 4
gpt4 key购买 nike

我有 3 个列表,abc

每个列表都包含具有 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)]

关于同时交叉和添加列表元素的 Pythonistic 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27023999/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com