2010-05-26 6 views
0

J'ai une chaîne comme celle-ci "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 ajoutant des éléments de la chaîne

Comment ajouter des éléments les uns aux autres en python?

J'ai essayé:

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

mais je reçois des erreurs constamment.

Répondre

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

sorties:

45.64 
4

Le « python-esque » façon de le faire:

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

fait une liste en divisant la chaîne par des espaces, puis tourner à chaque pièce en un flotteur et les additionner.

+0

David: Vous devez prendre en compte les virgules aléatoires. –

+0

Qu'est-ce qui est aléatoire au sujet des virgules? –

+2

David: Pourquoi ne pas abandonner la liste et utiliser la syntaxe du générateur? –

2

Edit: Si la conjecture de David avait raison ce que vous avez besoin Décimales:

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

Remarque J'utilise math.fsum() pour préserver la perte de virgule flottante.

+0

Les virgules dans la chaîne sont des points décimaux, je suppose. – David

+0

Huh? Tu m'as perdu. Cela signifie-t-il que nous devrions utiliser 'float' à la place? –

1

Si je comprends ce que vous voulez, essayez ceci:

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

Ok cela a fonctionné:

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

C'est identique à ma réponse (et beaucoup d'autres 'maintenant il semble). N'hésitez pas à accepter l'une de nos réponses! –

+0

ouais je sais, vous devez avoir écrit le vôtre quand je créais le mien :) – owca

4

Il ne faut pas être si ethnocentrique. ',' est un point décimal légitime pour beaucoup de gens. Ne le remplacez pas, adaptez-le en utilisant le module de paramètres régionaux:

>>> 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

Alors ne devrait pas la sortie soit '45,639'? – kibibu

+0

La valeur 45.64 (telle que je l'écris) est la valeur 45.64, quelle que soit la façon dont elle est affichée. Si vous deviez l'imprimer dans le format localisé, encapsulez-le dans locale.str(), ce qui dans ce cas donnerait "45,64". – PaulMcG

Questions connexes