2011-07-15 7 views
7

¿Alguien podría ayudarme a entender qué está pasando en el siguiente código de Python (python 3.2)? Estoy realmente despistado aquí.python - misma instrucción, resultado diferente

import sys 
u = sys.stdin.readline() 
    # try entering the string "1 2 3" 
r = map(lambda t: int(t.strip()),u.split()) 
print(sum(r)) # prints 6 
print(sum(r)) # prints 0 ? 

Gracias.

Respuesta

14

map() en Python 3.x devuelve un iterador, no una lista. Pasándolo por sum() la primera vez lo consume, sin dejar nada por segunda vez.

+2

Para agregar a esta respuesta: Si desea mantener los resultados como una lista, haga 'r = list (map (...))' en su lugar. – kindall

+2

@kindall en realidad, una lista de comprensión probablemente sería más limpia –

+0

Eso es cierto. Por supuesto, hubiera sido más limpio usarlo en primer lugar. :-) – kindall

Cuestiones relacionadas