Skip to main content
 首页 » 编程设计

python之对列表列表中的所有元素求和,除了第一个

2025年05月04日11zdz8207

添加列表列表中除第一个元素之外的所有元素并创建一个新列表。

  l = [[u'Security', -604.5, -604.5, -604.5,  
       -302.25, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -2115.75],  
       [u'Medicare', -141.38, -141.38, -141.38, -70.69,  
       0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -494.83],  
       [u'Insurance', -338.0, -338.0, -338.0, -169.0, 0.0,  
       0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1183.0]] 

输出应该是这样的

['total',-1083.88,-1083.88,-1083.88,-541.94,0.0,0.0,0.0,0.0,0.0,0.0, 
   0.0,0.0,-3793.58] 

例如:输出列表的-1083.88 = -604.5+(-141.38)+(-338.0)=-1083.88

我试过这样

for i in r: 
   del(i[0]) 
total = [sum(i) for i in zip(*r)] 

请您参考如下方法:

根据您的预期输出,我相信您正在寻找列的转置和求和。您可以为此使用 zip。

r = [sum(x) if not isinstance(x[0], str) else 'total' for x in zip(*l)] 
 
print(r) 
['total', -1083.88, -1083.88, -1083.88, -541.94, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -3793.58] 

或者,将转置转换为 list,您可以避免 if 检查(这类似于 MaximTitarenko's answer,所以也归功于它们)。

r = [sum(x) for x in list(zip(*l))[1:]] 
r.insert(0, 'total') 

或者,如果你愿意,

r = ['total'] + [sum(x) for x in list(zip(*l))[1:]] 

这有点不太优雅。