2014-06-15 40 views
2

的總和我在蟒蛇以下列表3字符串轉換的列表,以花車的列表,並讓所有的值

['12 32.12 453\n', '54 123 65\n', '12 32\n', '12 32 54 765 876\n'] 

如何從每個條目的末尾刪除\ n嗎?如何將列表轉換爲

[12.0, 32.12, 453.0, 54.0, 123.0, 65.0, 12.0, 32.0, 12.0, 32.0, 54.0, 765.0, 876.0] 

我需要一種方法來將每個數字轉換爲一個浮點數並將它們加在一起得到一筆數額。此這是到目前爲止我的代碼:

def calc_sum(filename): 
    new_list = [] 
    try: 
     file = open(filename) 
    except: 
     print("oops") 
     return None 
    line = file.readlines() 
    print(line) 
+0

使用's.split()'來獲得由空格分離的字符串列表,例如''12 32.12 453 \ n'.split() - > ['12',32.12','453']'。使用例如float('12')'將一個字符串轉換爲一個浮點數。 – U2EF1

回答

-1

strip方法將移除後的字符和split方法將在空間分割的每一行。然後使用float將字符串中的每個塊轉換爲浮點數,並使用sum來獲得總和。迭代線,總和線部分,你就完成了。

def calc_sum(filename) 
    result = 0.0 

    with open(filename) as stream: 
     for line in stream: 
      values = line.strip("\n").split(" ") 
      result += sum(float(x) for x in values) 

    return result 
+1

耶!任何東西隨機downvote ... –

1

轉換爲浮動的列表:

>>> a = ['12 32.12 453\n', '54 123 65\n', '12 32\n', '12 32 54 765 876\n']  
>>> k = [float(y) for lst in (x.split() for x in a) for y in lst] 
>>> k 
[12.0, 32.12, 453.0, 54.0, 123.0, 65.0, 12.0, 32.0, 12.0, 32.0, 54.0, 765.0, 876.0] 

獲取的總和:

>>> sum(k) 
2522.12 

所有在一條線:

>>> sum(float(y) for lst in (x.split() for x in a) for y in lst) 
2522.12 

說明

要看看發生了什麼事情,這裏是無需使用列表的等效代碼/發電機內涵:

k = [] 
for x in a: 
    x = x.split() 
    k.append(x) 

k現在[['12', '32.12', '453'], ['54', '123', '65'], ['12', '32'], ['12', '32', '54', '765', '876']]。我們已經擺脫了換行符,並有一個列表清單,每個內部列表包含字符串(可以轉換爲浮點數)。接下來,我們壓扁名單:

m = [] 
for sublist in k: 
    for x in sublist: 
     m.append(x)  

m['12', '32.12', '453', '54', '123', '65', '12', '32', '12', '32', '54', '765', '876']。最後,我們所有的字符串值轉換爲浮動:

k = [] 
for x in m: 
    k.append(float(x)) 

k[12.0, 32.12, 453.0, 54.0, 123.0, 65.0, 12.0, 32.0, 12.0, 32.0, 54.0, 765.0, 876.0]sum(k)將產生超過所有元素的總和。

0

嘗試使用map

>>> x = ['12 32.12 453\n', '54 123 65\n', '12 32\n', '12 32 54 765 876\n'] 
>>> map(float, ''.join(x).split()) 
[12.0, 32.12, 453.0, 54.0, 123.0, 65.0, 12.0, 32.0, 12.0, 32.0, 54.0, 765.0, 876.0] 
>>>