2010-05-26 125 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

相关问题