2013-04-01 2 views
1

Моя проблема: я хотел бы добавить все цифры в этой строке '1.14,2.14,3.14,4.14', но запятые заставляют мою функцию sum работать неправильно.
Я решил использовать функцию полосы, чтобы решить мою проблему, но кажется, что есть что-то, чего я не вижу или не понимаю.Удаление всех запятых из списка в Python

total = 0 
for c in '1.14,2.14,3.14'.strip(","): 
    total = total + float(c) 
print total 

Я искал, как удалить запятые из строки, но я нашел только информацию о том, как удалить запятые с самого начала или конца строки.

Дополнительная информация: Python 2.7

+1

Из первой строки вы ожидаете ответа '10.56' или ответа' 30.0'? –

ответ

7

Я хотел бы использовать следующее:

# Get an array of numbers 
numbers = map(float, '1,2,3,4'.split(',')) 

# Now get the sum 
total = sum(numbers) 
+0

Возможно немного менее изящно, 'ast.literal_eval' будет обрабатывать эту строку также ... – mgilson

+0

Большое спасибо –

4

Вы не хотите strip, вы хотите split.

Функция split будет разделять вашу строку на массив, используя символ разделителя, который вы передаете ему, в вашем случае split(',').

0

Это добавит все цифры в первой строке в вашем вопросе:

sum(float(x) for x in '1.14,2.14,3.14,4.14' if x.isdigit()) 
0

Так, кажется, быть образцом в списке ввода поплавков, это один вкладыш создает его:

>>> sum(map(float, ','.join(map(lambda x:str(x+0.14), range(1,5))).split(','))) 
10.559999999999999 

и так как это не имеет особого смысла объединения с запятыми и сразу разделив запятыми, вот немного разумнее кусок кода:

>>> sum(map(float, map(lambda x:str(x+0.14), range(1,5)))) 
10.559999999999999 



И если вы на самом деле означает, что вы хотели подвести одной цифры, а не действительные числа с плавающей точкой (хотя я сомневаюсь в этом, так как вы бросили плавать в примере кода):

>>> sum(map(int, ''.join(map(lambda x:str(x+0.14), range(1,5))).replace('.', ''))) 
30 
1

Вам нужно split не strip.

>>> for c in '1,2,3,4,5,6,7,8,9'.split(","): 
    print float(c) 

1.0 
2.0 
3.0 
4.0 
5.0 
6.0 
7.0 
8.0 
9.0 

Или, если вы хотите list comprehension:

>>> [float(c) for c in '1,2,3,4,5,6,7,8,9'.split(",")] 
[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0] 

И для получения суммы,

>>> sum(map(float, '1,2,3,4,5,6,7,8,9'.split(","))) 
45.0 
0
values=input()   
l=values.split(",") 
print(l) 

При значениях = 1,2,3,4,5

результат: ['1', '2', '3', '4', '5']

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