Mira el siguiente código de Python:

def function(x):
    return x, x+1

sequence = range(5)

map(function, sequence)

Esto vuelve

[(0,1), (1,2), (2,3), (3,4), (4,5)]

Quiero obtener la salida

[0, 1, 2, 3, 4], [1, 2, 3, 4, 5]

Eso significa que quiero obtener las dos salidas de función en dos listas diferentes. ¿Puedo lograr esto sin recorrer mis listas?

En el código real no tendré listas de enteros, sino de instancias de clase. Por lo tanto, podría tener algunos problemas de copia / copia profunda, que me gustaría evitar.

4
Till B 10 ago. 2011 a las 21:42

3 respuestas

La mejor respuesta

Espero que esto ayude:

>>> a = [(0,1), (1,2), (2,3), (3,4), (4,5)]
>>> zip(*a)
[(0, 1, 2, 3, 4), (1, 2, 3, 4, 5)]

http://docs.python.org/library/functions.html#zip

8
Savino Sguera 10 ago. 2011 a las 17:48
>>> a = zip(*map(function, sequence))
>>> for i in a: print(i)
...
(0, 1, 2, 3, 4)
(1, 2, 3, 4, 5)
3
Tim Pietzcker 10 ago. 2011 a las 17:46

Otro enfoque sería:

>>> seq = range(5+1)
>>> a = [seq[:-1], seq[1:]]
>>> a
[[0, 1, 2, 3, 4], [1, 2, 3, 4, 5]]
1
SiggyF 10 ago. 2011 a las 17:55