Skip to main content
 首页 » 编程设计

python之使用条件检查对嵌套列表中的元素求和

2025年05月04日24qlqwjy

我有一个列表列表,每个内部列表都有三个对象。我想对每个子列表的第一个索引(第二个对象)求和,但前提是子列表中的其他两个对象相同。例如:

list_in = [['aa', 2, 'bb'], ['aa', 2, 'bb']] 

由于 'aa' 和 'bb' 相同,我想将 2 和 2 相加等于 4,并将其输出到一个新列表中:

list_out = ['aa', 4, 'bb'] 

所以我需要一个if 语句。我尝试了以下方法:

list_out = [] 
if i[0]==i[0] for i in list_in: 
    total = [sum(list_in[1]) for i in range(len(list_in))] 
    list_out.append(i[0], total, i[2]) 

但是 python 给我一个 InvalidSyntax 错误。我不确定如何解决这个问题。

然后我尝试根据条件构造一个新列表,如果第一个和第三个对象相同,则对第二个对象求和:

list_out, total = [], 0 
for i in list_in:  # "i" is a list within the "list_in" list. 
    x, y, z = i[0], i[1], i[2] 
    if x not in list_out and z not in list_out: 
        list_out.append([x, y, z]) 
    elif x in list_out and z in list_out: 
        total_y += y 
        list_out.append([x, total_y, z]) 
return list_out 

但是,这只给我提供了与开始时相同的列表。显然 if 和 elif 语句无法正常工作。

请您参考如下方法:

你可以使用itertools.groupby:

import itertools 
list_in = [['aa', 2, 'bb'], ['aa', 2, 'bb']] 
new_list = [(a, list(b)) for a, b in itertools.groupby(sorted(list_in, key=lambda x:(x[0], x[-1])), key=lambda x:(x[0], x[-1]))] 
final_data = [[a, sum(c[1] for c in d), b] for (a, b), d in new_list][0] 

输出:

['aa', 4, 'bb'] 
如果 list_in 的长度超过二,

itertools.groupby 允许更通用的解决方案。

编辑:该解决方案适用于更大的列表:

list_in = [['aa', 2, 'bb'], ['aa', 2, 'bb'], ['aa', 15, 'bb']] 
new_list = [(a, list(b)) for a, b in itertools.groupby(sorted(list_in, key=lambda x:(x[0], x[-1])), key=lambda x:(x[0], x[-1]))] 
final_data = [[a, sum(c[1] for c in d), b] for (a, b), d in new_list][0] 

输出:

['aa', 19, 'bb'] 

在 Python 中,一个函数就是一个对象。 lambda 函数被称为“匿名函数”,因为当它的对象被创建时,它没有绑定(bind)到一个名称。相反,函数对象本身被返回。