Skip to main content
 首页 » 编程设计

python比较列表子列表的值并将值相加

2025年05月04日8kenshinobiy

我有一个包含未知数量子列表的列表。 我想总是将一个子列表与 ALL 其他子列表进行比较。 如果位置 0、3 和 5 的第一个子列表的值等于任何其他子列表,我想将所有匹配列表中位置 7 的值加在一起。 然后将位置 7 为(新添加的值)的第一个子列表添加到新列表。

list = [['A', 'a', 'b', 'B', 'c', 'd', 'C', '1'],  
         ['A', 'a', 'b', 'B', 'c', 'd', 'C', '3'],  
         ['D', 'r', 's', 'E', 't', 'u', 'F', '2'],  
         ['A', 'a', 'b', 'B', 'c', 'd', 'C', '2'],  
         ['D', 'r', 's', 'E', 't', 'u', 'F', '2'],.....] 

想要的输出:

new_list = [['A', 'a', 'b', 'B', 'c', 'd', 'C', '6'],  
             ['D', 'r', 's', 'E', 't', 'u', 'F', 4],...] 

这段代码是我写的

def Inter(list): 
a = 0 
b = 3  
c = 5  
d = 0 
x = []  
 
for i in range(len(list)):  
    for y in range(len(list)): 
        if list[i][a] == list[y][a] and list[i][b] == list[y][b] and list[i][c] == list[y][c]:  
            IntSumtemp = [] 
            IntSumtemp.append(str(float(list[i][7]) + float(list[y][7]))) 
            x.append(list[i] + IntSumtemp)  
            del (x[d][7]) 
            d +=1 
        else: None 
return x 
new_list= Inter(list) 

但它给出了这个输出:

new_list= [['A', 'a', 'b', 'B', 'c', 'd', 'C', '2.0'],  
       ['A', 'a', 'b', 'B', 'c', 'd', 'C', '4.0'],  
       ['A', 'a', 'b', 'B', 'c', 'd', 'C', '3.0'],  
       ['A', 'a', 'b', 'B', 'c', 'd', 'C', '4.0'],  
       ['A', 'a', 'b', 'B', 'c', 'd', 'C', '6.0'],  
       ['A', 'a', 'b', 'B', 'c', 'd', 'C', '5.0'],  
       ['D', 'r', 's', 'E', 't', 'u', 'F', '4.0'],  
       ['D', 'r', 's', 'E', 't', 'u', 'F', '4.0'],  
       ['A', 'a', 'b', 'B', 'c', 'd', 'C', '3.0'],  
       ['A', 'a', 'b', 'B', 'c', 'd', 'C', '5.0'],  
       ['A', 'a', 'b', 'B', 'c', 'd', 'C', '4.0'],  
       ['D', 'r', 's', 'E', 't', 'u', 'F', '4.0'], 
       ['D', 'r', 's', 'E', 't', 'u', 'F', '4.0']] 

有人可以帮我解决这个问题吗? (对不起,我是一个绝对的初学者,所以如果有什么不清楚的地方,请问...)

请您参考如下方法:

这种方法是 O(N) 而不是你的 O(N^2)

from collections import OrderedDict 
from operator import itemgetter 
 
items = [['A', 'a', 'b', 'B', 'c', 'd', 'C', '1'],  
         ['A', 'a', 'b', 'B', 'c', 'd', 'C', '3'],  
         ['D', 'r', 's', 'E', 't', 'u', 'F', '2'],  
         ['A', 'a', 'b', 'B', 'c', 'd', 'C', '2'],  
         ['D', 'r', 's', 'E', 't', 'u', 'F', '2']] 
 
 
key = itemgetter(0, 3, 5) 
d = OrderedDict() 
 
for x in items: 
    d.setdefault(key(x), x[:7] + [0])[7] += int(x[7]) 
 
print d.values() 

[['A', 'a', 'b', 'B', 'c', 'd', 'C', 6], ['D', 'r', 's', 'E', 't', 'u', 'F', 4]]