2010-05-26 71 views
0

我有這樣的字符串「1 1 3 2 1 1 1 2 1 1 1 1 1 1 1,5 0,33 0,66 1 0,33 0,66 1 1 2 1 1 2 1 1 2 0,5 0,66 2 1 2 1 1 1 0 1「。Python從字符串中添加元素

如何在python中相互添加元素?

我已經試過:

list = [] 
for x in str.replace(' ', ''): 
    list.append(x) 
sum = 0 
for y in list: 
    sum = sum + double(x) 

,但我不斷收到錯誤。

回答

7
print sum(float(x.replace(',', '.')) for x in str.split(' ')) 

輸出:

45.64 
4

做它的「蟒式的」方式:

sum([float(num) for num in str.replace(',', '.').split(' ')]) 

通過拆分用空格字符串使一個列表,然後打開每件爲浮點並把它們加起來。

+0

David:您必須考慮隨機逗號。 – 2010-05-26 00:20:47

+0

什麼是逗號隨機? – 2010-05-26 00:23:58

+2

David:爲什麼不放棄列表並使用生成器語法? – 2010-05-26 00:26:06

2

編輯:如果大衛的猜測是正確的,這樣你需要小數:

>>> from math import fsum 
>>> fsum(float(n) for n in input.replace(',', '.').split()) 
45.640000000000001 

注意我使用math.fsum()保存浮點損失。

+0

字符串中的逗號是小數點,我假設。 – David 2010-05-26 00:21:17

+0

咦?你失去了我。這是否意味着我們應該使用'float'來代替? – 2010-05-26 00:22:35

1

如果我知道你想什麼,那就試試這個:

list = [] 
for x in str.replace(',', '.').split(): 
    list.append(x) 
sum = 0 
for x in list: 
    sum = sum + float(x) 
2
my_string = "1 1 3 2 1 1 1 2 1 1 1 1 1 1 1 1,5 " 
      "0,33 0,66 1 0,33 0,66 1 1 2 1 1 2 " 
      "1 1 2 0,5 0,66 2 1 2 1 1 1 0 1" 

my_string = my_string.replace(',', '.') 

value = sum([float(n) for n in my_string.split()]) 
1

好這個工作:

sum(float(n) for n in str.replace(',','.').split()) 
+0

這與我的回答相同(現在看起來很多人都是這樣)。隨時接受我們的答案之一! – 2010-05-26 00:26:31

+0

是的,我知道,當我創建我的時候,你一定寫過你的了:) – owca 2010-05-26 01:30:37

4

讓我們不要是所以以民族爲中心。 ','對許多人來說是合法的小數點。不要替換它,使用語言環境模塊來適應它:

>>> s = "1 1 3 2 1 1 1 2 1 1 1 1 1 1 1 1,5 0,33 0,66 1 0,33 0,66 1 1 2 1 1 2 1 1 2 0,5 0,66 2 1 2 1 1 1 0 1" 
>>> import locale 
>>> locale.setlocale(0,"po") 
'Polish_Poland.1250' 
>>> sum(map(locale.atof, s.split())) 
45.639999999999993 
+1

那麼輸出不應該是'45,639'? – kibibu 2010-05-26 01:54:10

+0

值45.64(正如我寫的)是45.64的值,不管它是如何顯示的。如果你需要以本地化的格式打印出來,然後把它包裝在locale.str()中,在這種情況下它會給出「45,64」。 – PaulMcG 2010-05-26 01:58:37

相關問題