Acerca de:

Este blog contiene los códigos, ejemplos y bases de datos que he usado cuando aprendía acerca de algún tema específico. En lugar de borrarlos (una vez dominado ya el tema), he decidido publicarlos :)

sábado, 11 de febrero de 2017

Diferencias de la función map entre Python 2.7 y Python 3.4

Tengo el siguiente código que elimina los duplicados en una lista:

list1 = [1, 1, 1, 3, 3, 3, 56, 6, 6, 6, 7]

list2 = []
map(lambda x: not x in list2 and list2.append(x), list1)
print(list2)

list2 = []
[list2.append(c) for c in list1 if c not in list2]
print(list2)

list2 = []

for c in list1:
    if c not in list2:
        list2.append(c)

print(list2)



En Python 2.7 imprime:

    [1, 3, 56, 6, 7]

    [1, 3, 56, 6, 7]

    [1, 3, 56, 6, 7]


   
En Python 3.4 imprime:

    []

    [1, 3, 56, 6, 7]

    [1, 3, 56, 6, 7]



La función map no devuelve una lista en Python 3.4, devuelve un iterable el cual (al igual que los Enumerables en C#) no produce resultados hasta que se consume. Si se quieren los resultados de la función map en una lista en Python 3.4, se debe hacer:

list(map(lambda x: not x in list2 and list2.append(x), list1))

Más información en la pregunta que hice en StackOverflow:
http://es.stackoverflow.com/a/47861 en español
http://stackoverflow.com/a/42043141 en inglés