2010-05-26 3 views
0

У меня есть строка типа «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 ".Элементы добавления питона из строки

Как добавить элементы друг к другу в 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: Вы должны учитывать случайные запятые. –

+0

Что такое запятая? –

+2

David: Почему бы просто не отбросить список и использовать синтаксис генератора? –

2

Edit: Если догадка Давида была права таким образом, что вам нужно десятичные:

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

Примечание Я использую math.fsum(), чтобы сохранить потери с плавающей точкой.

+0

. Я считаю, что запятые в строке являются десятичными точками. – David

+0

А? Ты потерял меня. Означает ли это, что мы должны использовать 'float' вместо этого? –

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

Это похоже на мой ответ (и теперь многие другие). Не стесняйтесь принять один из наших ответов! –

+0

Да, я знаю, вы, должно быть, написали свое, когда я создавал свою мину :) – owca

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

+0

Значение 45.64 (как я его пишу) - это значение 45.64, независимо от того, как оно отображается. Если вам нужно было распечатать его обратно в локализованном формате, затем заверните его в locale.str(), который в этом случае даст «45,64». – PaulMcG

Смежные вопросы