2011-05-15 4 views
2

prorgamming newbie - Je cherchais des réponses à un exercice que je faisais et j'ai obtenu mes réponses de here. Ma question est - à partir de ce fil, celui choisi comme meilleure réponse, ce code était[float (i) pour i in lst]

[float(i) for i in lst] 

Le code a fait ce qu'il était censé faire, mais quand j'ai essayé de se rendre à cette nouvelle liste, je suis obtenir des erreurs

>>> xs = '12 10 32 3 66 17 42 99 20'.split() 
>>> [float(i) for i in xs] 
[12.0, 10.0, 32.0, 3.0, 66.0, 17.0, 42.0, 99.0, 20.0] 
>>> i 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'i' is not defined 

Comment dois-je faire?

Merci!

+3

Chaque fois que l'invite python imprime quelque chose, c'est que tout ce que vous venez de taper a renvoyé une valeur. Vous pouvez conserver cette valeur en affectant une variable à l'expression que vous avez saisie, mais rien ne sera imprimé. – SingleNegationElimination

Répondre

7

Vous devez assigner [float(i) for i in xs] à quelque chose:

>>> new_list = [float(i) for i in xs] 
>>> new_list 
[12.0, 10.0, 32.0, 3.0, 66.0, 17.0, 42.0, 99.0, 20.0] 
>>> new_list[0] 
12.0 
>>> new_list[5] 
17.0 
0

i existe seulement dans la compréhension de la liste.

Vous voulez dire:

i = [float(i) for i in lst] 
+2

L'utilisation de 'i' comme variable à l'intérieur et à l'extérieur de la liste peut entraîner une confusion inutile. – Johnsyweb

+0

ou plutôt, peut-être que ce que vous * voulez vraiment dire est floatlist = [.... ', puisque nommer la liste après l'itérateur est un peu confus. – SingleNegationElimination

+1

pour l'exhaustivité, 'i' n'existe que dans la compréhension de la liste dans Python 3. Dans Python 2, vous pouvez accéder' i' à l'extérieur. – carl

1

Contrairement aux boucles qui laissent la dernière itération liée à la variable du var dans un échantillon de la liste existante arrête après évaluation.

3

carte en utilisant:

xs = '12 10 32 3 66 17 42 99 20'.split() 
new_xs = map(float, xs) 
+2

L'utilisation de ['map()'] (http://docs.python.org/library/functions.html#map) est certainement la meilleure façon d'y parvenir. – Johnsyweb

0

Ceci est quelque chose lié aux versions Python. Regardez: sur Python 2, si vous le faites:

>>> i = 1234 
>>> j = [i for i in xrange(10)] 
>>> print i 
9 

Mais cela a été corrigé dans Python 3:

>>> i = 1234 
>>> j = [i for i in range(10)] 
>>> print(i) 
1234 

Si vous avez Python 3.0 ou supérieur, la variable ne sera disponible que dans la compréhension . Cela n'affecte pas le reste de l'environnement

0

En alternative à l'attribution d'un nom à votre liste de compréhension, en mode interactif Python, le symbole _ est automatiquement affecté à la dernière expression évaluée par l'interpréteur. Donc, vous pouvez faire ce qui suit:

>>> xs = '12 10 32 3 66 17 42 99 20'.split() 
>>> [float(i) for i in xs] 
[12.0, 10.0, 32.0, 3.0, 66.0, 17.0, 42.0, 99.0, 20.0] 
>>> _ 
[12.0, 10.0, 32.0, 3.0, 66.0, 17.0, 42.0, 99.0, 20.0] 
>>> _[2] 
32.0 
>>> _ 
32.0 
Questions connexes