Lista de comprensiones en Python

    Una lista es uno de los tipos de datos fundamentales en Python. Cada vez que te encuentras con un nombre de variable seguido de un corchete []o un list constructor, es una lista capaz de contener varios elementos, lo que la convierte en un tipo de datos compuesto. Del mismo modo, tambi茅n es muy sencillo declarar una nueva lista y, posteriormente, agregarle uno o m谩s elementos.

    Creemos una nueva lista poblada, por ejemplo:

    >>> new_list = [1, 2, 3, 4, 5]
    >>> new_list
    [1, 2, 3, 4, 5]
    

    O simplemente podemos usar el append() m茅todo para agregar cualquier cosa que desee a la lista:

    >>> new_list.append(6)
    >>> new_list
    [1, 2, 3, 4, 5, 6]
    

    Si necesita agregar varios elementos a la misma lista, el extend() El m茅todo ser谩 煤til. Simplemente necesita pasar la lista de elementos para agregar al extend m茅todo, como se muestra a continuaci贸n:

    >>> new_list.extend([7, 8, 9])
    >>> new_list
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    Como puede ver, crear una lista y adjuntarla a otros elementos es muy sencillo. Puede realizar esta tarea sin tener que realizar varias llamadas al .append() m茅todo.

    Del mismo modo, puede utilizar un for bucle para agregar varios elementos a una lista. Por ejemplo, tendremos que escribir el siguiente fragmento de c贸digo para crear una lista de cuadrados para los enteros 1-20.

    list_a = []
    for i in range(1, 20):
        list_a.append(i**2)
    

    驴Qu茅 son las listas de comprensi贸n en Python?

    En las palabras m谩s simples, la comprensi贸n de listas es el proceso de crear una nueva lista a partir de una lista existente. O puede decir que es la forma 煤nica de Python de agregar un for bucle a una lista. Pero, ya es bastante simple declarar una lista y agregarle lo que quiera. 驴No es as铆? Entonces, 驴por qu茅 molestarse en comprender nuestras listas?

    La comprensi贸n de listas, de hecho, ofrece muchos beneficios sobre las listas tradicionales. Para empezar, el c贸digo ocupa una sola l铆nea, lo que facilita a煤n m谩s su declaraci贸n y lectura. Tambi茅n es menos engorroso comprender listas que usar for bucles para declarar uno nuevo. Por 煤ltimo, tambi茅n es una forma c贸moda, r谩pida e intuitiva de generar una lista nueva y completa.

    Volviendo a los cuadrados de los enteros del 1 al 20, podemos obtener el mismo resultado utilizando el m茅todo de comprensi贸n de listas. As铆 es como se ver谩 nuestro c贸digo ahora:

    list_b = [i**2 for i in range(1, 20)]
    

    Observe c贸mo la l贸gica para generar los elementos de la lista est谩 envuelta entre par茅ntesis. Cubriremos m谩s sobre la sintaxis en la siguiente secci贸n.

    Sintaxis para comprensiones de listas

    Antes de seguir adelante, es imperativo explicar la sintaxis de la comprensi贸n de listas. Aqu铆 est谩 la sintaxis b谩sica de la comprensi贸n de listas que contiene una condici贸n:

    [expression for item in list if conditional]
    

    Puede parecer un poco al rev茅s con la expresi贸n antes del ciclo, pero as铆 es como se hace. El orden es as铆, presumiblemente, porque ser铆a dif铆cil poner la expresi贸n despu茅s del condicional sin alg煤n tipo de punto y coma, que Python no tiene.

    Como ya habr谩 adivinado, “expresi贸n” es en realidad el resultado que obtenemos cuando ejecutamos el resto del c贸digo en la comprensi贸n de listas. El c贸digo en s铆 es solo un bucle for que recorre una colecci贸n de datos. En nuestro ejemplo, estamos usando la expresi贸n, o la salida, para generar la lista de cuadrados.

    Tenga en cuenta que el condicional es opcional, por lo que, como en nuestro ejemplo anterior, no es necesario incluirlo.

    Tambi茅n vale la pena mencionar que tenemos una lista sobre la que se repite el bucle, el elemento o elementos que se van a iterar y, por supuesto, una declaraci贸n condicional tanto en la comprensi贸n de la lista como en los bucles for tradicionales. Entonces, cada m茅todo tiene las mismas construcciones generales, pero la diferencia es c贸mo los formatea y organiza.

    Tambi茅n veremos otro ejemplo m谩s complejo para comprender mejor el concepto detr谩s de la comprensi贸n de listas.

    list_a = [1, 3, 6, 9, 12, 15]
    list_b = []
    for number in list_a:
        if number % 4 == 0:
            list_b.append(number)
    
    print(list_b)
    

    En realidad, estamos recorriendo el list_a en el ejemplo anterior. Posteriormente, agregaremos un art铆culo a list_b si su valor es divisible por 4, lo cual se verifica usando el operador de m贸dulo (%). En este ejemplo, ver铆amos lo siguiente impreso en la consola:

    [12]
    

    Esto se debe a que 12 es el 煤nico n煤mero de esa matriz que es divisible por 4.

    Una vez m谩s, podemos usar la comprensi贸n de listas para reducir el total de l铆neas de c贸digo que tenemos que escribir para lograr el mismo objetivo.

    Como se mencion贸 anteriormente, el for bucle en la declaraci贸n anterior est谩 iterando sobre la lista llamada list_a. Luego ejecuta la declaraci贸n condicional que verifica si el valor actual es divisible por 4. Finalmente, ejecuta la .append() m茅todo cuando determina que el valor es realmente divisible por 4.

    Ahora, si desea escribir el fragmento de c贸digo anterior con comprensi贸n de lista, se ver铆a as铆:

    list_a = [1, 3, 6, 9, 12, 15]
    list_b = [number for number in list_a if number % 4 == 0]
    
    print(list_b)
    

    Como puede ver, hemos reducido el for bucle, que abarcaba m谩s de tres l铆neas, hasta una sola l铆nea. Esa es realmente la verdadera belleza de la comprensi贸n de listas.

    Cu谩ndo usar listas de comprensi贸n

    Puede utilizar la comprensi贸n de listas en muchos casos en los que necesite generar una lista a partir de un iterable. Sin embargo, el mejor momento para usar este m茅todo es cuando necesita agregar o extraer elementos a una lista de manera consistente de acuerdo con un patr贸n establecido. Los desarrolladores de Python los utilizan principalmente para extraer datos de una gran colecci贸n de elementos.

    Supongamos que tiene una lista de miles de estudiantes actuales y anteriores con sus nombres, el nombre de su padre y direcciones. Los datos de cada uno de los estudiantes se almacenan adem谩s en un diccionario respectivo. Pero, 驴y si solo desea imprimir sus nombres?

    students = [
        {
            "name" : "Jacob Martin",
            "father name" : "Ros Martin",
            "Address" : "123 Hill Street",
        }, {
            "name" : "Angela Stevens",
            "father name" : "Robert Stevens",
            "Address" : "3 Upper Street London",
        }, {
            "name" : "Ricky Smart",
            "father name" : "William Smart",
            "Address" : "Unknown",
        }
    ]
    

    Tenemos la opci贸n de iterar sobre la lista usando el tradicional for lazo:

    names_list = []
    
    for student in students:
        names_list.append(student['name'])
    
    print(names_list)
    

    Aunque en este ejemplo son solo dos l铆neas de c贸digo para el for loop, ni siquiera necesitamos escribir tantas l铆neas. Podemos lograr la misma tarea escribiendo solo una l铆nea de c贸digo a trav茅s del m茅todo de comprensi贸n de listas:

    names_list = [student['name'] for student in students]
    
    print(names_list)
    
    ['Jacob Martin', 'Angela Stevens', 'Ricky Smart']
    

    Conclusi贸n

    Es realmente sorprendente c贸mo las listas por comprensi贸n tambi茅n reducen la carga de trabajo. Sin embargo, puede parecer confuso al principio. Es particularmente desconcertante para los principiantes que nunca antes se han aventurado en este territorio, principalmente debido a la sintaxis. Tambi茅n puede resultarle dif铆cil comprender el concepto si ha estado programando en otros lenguajes porque la comprensi贸n de listas no existe en ninguno de ellos. La 煤nica forma de entender la comprensi贸n de las listas es practicar mucho.

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *