2017-04-23 86 views
1

目前,我有四個列表,我想將它們歸納成一個列表。打印四個不同的浮動列表的總和?

L1 = [2.3,4.5,6.9] 
L2 = [1.2,3.5,5.4] 
L3 = [12.1,6.8,2.4] 
L4 = [15.2,5.9,11.7] 

這會給我:

newList = [30.8,20.7,26.4] 

我擡頭利用zips許多方法,但是我正在尋找這樣做很長的路的方法。如果沒有方便的方法,我不介意使用拉鍊,但只是好奇。

基本上我會創建一個新的列表,但我無法計算總和部分。

newL = [] 
for val in L1: 
    for val in L2:?? 

回答

3

假設所有四個列表的長度相同,可選擇的解決方案是:

  • 列表解析:

    sumsList = [L1[i]+L2[i]+L3[i]+L4[i] for i in range(len(L1))] 
    

    ,替代解決方案,更優雅,在我看來:

    someList = [L1,L2,L3,L4] 
    sumsList = [sum([l[i] for l in someList]) for i in range(len(L1))] 
    
  • for-in循環:

    sumsList = [] 
    for i in range(len(L1)): 
        sumsList.append(L1[i]+L2[i]+L3[i]+L4[i]) 
    

結果:[30.799999999999997, 20.700000000000003, 26.4]

最好的部分:不使用zip()

5

您可以使用壓縮這樣的:

[sum(t) for t in zip(L1, L2, L3, L4)] 
# [30.799999999999997, 20.700000000000003, 26.4] 
1
>>> L = [[2.3, 4.5, 6.9], 
...  [1.2, 3.5, 5.4], 
...  [12.1, 6.8, 2.4], 
...  [15.2, 5.9, 11.7]] 
>>> list(map(sum, zip(*L))) 
[30.799999999999997, 20.700000000000003, 26.399999999999999] 
1

我想你可以使用mapsumzip

list_sums = map(sum, zip(L1,L2,L3,L4)) 
# [30.799999999999997, 20.700000000000003, 26.4] 
0

zip將是最好的答案...

newList = [a + b + c + d for a,b,c,d in zip(L1,L2,L3,L4)] 
1

如果你不想發生前改變最終產品,然後一個元組構造比列表更快,表達元組(),如下:

total_of_each_element = tuple(sum(t) for t in zip(L1,L2,L3,L4)) 

將實現這一點,這裏是我的代碼

L1 = [2.3,4.5,6.9] 
L2 = [1.2,3.5,5.4] 
L3 = [12.1,6.8,2.4] 
L4 = [15.2,5.9,11.7] 

total_of_each_element = tuple(sum(t) for t in zip(L1,L2,L3,L4)) 
print (total_of_each_element) 

打印:

(30.799999999999997, 20.700000000000003, 26.4) 

圓它:

total_of_each_element = tuple(round(sum(t),2) for t in zip(L1,L2,L3,L4)) 
print (total_of_each_element) 

打印:

(30.8, 20.7, 26.4) 

可選地,使所有的列表相同的長度,添加零到較短的:

lists = [L1,L2,L3,L4] 
longest = len(max(lists,key=len)) 
for lst in lists: 
    if len(lst) < longest: 
     n = longest - len(lst) 
     for i in range(n): 
      lst.append(0) 

然後總和輪一個for循環:

total_of_each_element = [] 
for i in range(longest): 
    total_of_each_element.append(round((L1[i]+L2[i]+L3[i]+L4[i]),2)) 
print (total_of_each_element) 

打印:

[30.8, 20.7, 26.4] 
0

您可以使用numpy.You只是改變他們numpy的陣列,並做簡單的加法。

import numpy as np 
print np.array(L1)+np.array(L2)+np.array(L3)+np.array(L4)