Una list es una colección mutable de elementos en secuencia. Como la mayoría de las colecciones (mira los tipos integrados tuple, dict y set), una list puede contener referencias a cualquier tipo de dato (o a varios), incluida otra list. Una list se puede copiar en su totalidad o en parte mediante la notación de rebanadas o usando <list>.copy(). Como en cualquier tipo de secuencia, se hace referencia a los elementos dentro de las lists mediante un número de 0-based index desde la izquierda, o un número de -1-based index desde la derecha.
Una list admite tanto operaciones de secuencia comunes como mutables, como min(<list>)/max(<list>), <list>.index(), <list>.append() y <list>.reverse(). Se puede iterar sobre los elementos dentro de una list usando la construcción for item in <list>. for index, item in enumerate(<list>) se puede usar cuando necesitas tanto el índice como el valor del elemento.
Python también ofrece muchos métodos de list útiles para trabajar con lists. A continuación se cubre una selección de estos list methods.
Ten en cuenta que cuando manipulas una list con un list-method, alteras la list que se pasó. Si no quieres mutar la list original, tendrás que hacer al menos una shallow copy de ella mediante una rebanada o <list>.copy().
Para agregar un elemento al final o al «lado derecho» de una list existente, usa <list>.append(<item>):
>>> numbers = [1, 2, 3]
>>> numbers.append(9)
>>> numbers
[1, 2, 3, 9]
En lugar de agregar al final, <list>.insert() te permite agregar el elemento en un índice específico de la list. Recibe 2 parámetros:
<index> en el que quieres insertar el elemento.<item> que se va a insertar.Nota: Si el index dado es 0, el elemento se agregará al inicio (el «lado izquierdo») de la list. Si el index proporcionado es mayor que el index final de la list, el elemento se agregará en la última posición, lo que equivale a usar <list>.append(<item>).
>>> numbers = [1, 2, 3]
>>> numbers.insert(0, -2)
>>> numbers
[-2, 1, 2, 3]
>>> numbers.insert(1, 0)
>>> numbers
[-2, 0, 1, 2, 3]
<list>.extend(<item>) se puede usar para combinar una list existente con los elementos de otro iterable (por ejemplo, un set, tuple, str o list). El iterable se desempaqueta y los elementos se agregan en orden (usar <list>.append(<item>) en este caso agregaría el iterable completo como un solo elemento.).
>>> numbers = [1, 2, 3]
>>> other_numbers = [5, 6, 7]
>>> numbers.extend(other_numbers)
>>> numbers
[1, 2, 3, 5, 6, 7]
>>> numbers.extend([8, 9])
>>> numbers
[1, 2, 3, 5, 6, 7, 8, 9]
>>> numbers.append([8,9])
>>> numbers
[1, 2, 3, 5, 6, 7, 8, 9, [8, 9]]
Para eliminar un elemento de una list, usa <list>.remove(<item>), pasando como argumento el elemento que quieres eliminar. <list>.remove(<item>) lanzará un ValueError si el elemento no está presente en la list.
>>> numbers = [1, 2, 3]
>>> numbers.remove(2)
>>> numbers
[1, 3]
# Trying to remove a value that is not in the list throws a ValueError
>>> numbers.remove(0)
ValueError: list.remove(x): x not in list
Como alternativa, el método <list>.pop(<index>) elimina un elemento y además lo return para que puedas usarlo.
<list>.pop(<index>) recibe un parámetro opcional: el index del elemento que se va a eliminar y devolver. Si no se especifica el argumento index (opcional), se eliminará y devolverá el último elemento de la list. Si el index especificado es mayor que el index del último elemento, se lanza un IndexError.
>>> numbers = [1, 2, 3]
>>> numbers.pop(0)
1
>>> numbers
[2, 3]
>>> numbers.pop()
3
>>> numbers
[2]
>>> numbers.pop(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: pop index out of range
Se pueden eliminar todos los elementos de una list con list.clear(). No recibe ningún parámetro.
>>> numbers = [1, 2, 3]
>>> numbers.clear()
>>> numbers
[]
El método <list>.reverse() invierte el orden de los elementos en el lugar.
>>> numbers = [1, 2, 3]
>>> numbers.reverse()
>>> numbers
[3, 2, 1]
Una list se puede reordenar en el lugar con la ayuda de <list>.sort(). El orden predeterminado es ascendente desde la izquierda. La documentación de Python ofrece consejos y técnicas adicionales para ordenar.
>>> names = ["Tony", "Natasha", "Thor", "Bruce"]
# The default sort order is *ascending*.
>>> names.sort()
>>> names
["Bruce", "Natasha", "Thor", "Tony"]
Si quieres un orden descendente, pasa el argumento reverse=True:
>>> names = ["Tony", "Natasha", "Thor", "Bruce"]
>>> names.sort(reverse=True)
>>> names
["Tony", "Thor", "Natasha", "Bruce"]
Cuando no quieras mutar la list original, puedes usar la función integrada sorted(<iterable>) para devolver una copia ordenada.
>>> names = ["Tony", "Natasha", "Thor", "Bruce"]
>>> sorted(names)
['Bruce', 'Natasha', 'Thor', 'Tony']
El número de ocurrencias de un elemento en una list se puede calcular con list.count(<item>). Recibe como argumento el item que se va a contar y devuelve el número total de veces que ese elemento aparece en la list.
>>> items = [1, 4, 7, 8, 2, 9, 2, 1, 1, 0, 4, 3]
>>> items.count(1)
3
<list>.index(<item>) devolverá el número de index de la primera ocurrencia de un elemento que se pase. Si no hay ocurrencias, se lanza un ValueError. Si no necesitas la posición exacta de un elemento, el operador in integrado es más eficiente para comprobar si una list contiene un valor dado.
La indexación empieza en cero desde la izquierda, así que la posición del «primer» elemento es 0. La indexación también funciona desde la derecha, comenzando con -1.
>>> items = [7, 4, 1, 0, 2, 5]
>>> items.index(4)
1
>>> items.index(10)
ValueError: 10 is not in list
También se pueden indicar los índices start y end para limitar la búsqueda a una sección específica de la list:
>>> names = ["Tina", "Leo", "Thomas", "Tina", "Emily", "Justin"]
>>> names.index("Tina")
0
>>> names.index("Tina", 2, 5)
3
Chaitana es dueña de un parque de diversiones muy popular. Solo tiene una atracción en el mismísimo centro de unos jardines bellamente diseñados: La Montaña Rusa Más Grande del Mundo(TM). Aunque solo existe esta atracción, gente de todo el mundo viaja y hace fila durante horas para tener la oportunidad de subirse a la hipercoaster de Chaitana.
Hay dos filas para esta atracción, cada una representada como una list:
Te han pedido que escribas algo de código para gestionar mejor a los visitantes del parque. Necesitas implementar las siguientes funciones lo antes posible, antes de que los visitantes (¡y tu jefa, Chaitana!) se pongan de mal humor. Asegúrate de leer con atención. Algunas tareas te piden que cambies o actualices la fila existente, mientras que otras te piden que hagas una copia de ella.
Define la función add_me_to_the_queue() que recibe 4 parámetros <express_queue>, <normal_queue>, <ticket_type>, <person_name> y devuelve la fila correspondiente actualizada con el nombre de la persona.
<ticket_type> es un int donde 1 == express_queue y 0 == normal_queue.<person_name> es el nombre (como un str) de la persona que se agregará a la fila correspondiente.>>> add_me_to_the_queue(express_queue=["Tony", "Bruce"], normal_queue=["RobotGuy", "WW"], ticket_type=1, person_name="RichieRich")
...
["Tony", "Bruce", "RichieRich"]
>>> add_me_to_the_queue(express_queue=["Tony", "Bruce"], normal_queue=["RobotGuy", "WW"], ticket_type=0, person_name="HawkEye")
....
["RobotGuy", "WW", "HawkEye"]
Una persona llegó tarde al parque, pero quiere unirse a la fila donde están esperando sus amigos. Pero no tiene idea de dónde están parados sus amigos y no hay señal de teléfono para llamarlos.
Define la función find_my_friend() que recibe 2 parámetros queue y friend_name y devuelve la posición que ocupa en la fila el nombre de la persona.
<queue> es la list de personas que están en la fila.<friend_name> es el nombre del amigo cuyo índice (lugar en la fila) necesitas encontrar.Recuerda: la indexación empieza en 0 desde la izquierda y en -1 desde la derecha.
>>> find_my_friend(queue=["Natasha", "Steve", "T'challa", "Wanda", "Rocket"], friend_name="Steve")
...
1
Ahora que ya se encontraron sus amigos (en la tarea 2 de arriba), a quien llegó tarde le gustaría unirse a ellos en su lugar de la fila.
Define la función add_me_with_my_friends() que recibe 3 parámetros queue, index y person_name.
<queue> es la list de personas que están en la fila.<index> es la posición en la que se debe agregar a la nueva persona.<person_name> es el nombre de la persona que se agregará en la posición del índice.Devuelve la fila actualizada con el nombre de quien llegó tarde.
>>> add_me_with_my_friends(queue=["Natasha", "Steve", "T'challa", "Wanda", "Rocket"], index=1, person_name="Bucky")
...
["Natasha", "Bucky", "Steve", "T'challa", "Wanda", "Rocket"]
Acabas de escuchar en la fila que hay una persona muy grosera que empuja, grita y arma problemas. ¡Tienes que sacar a ese malhechor por su mal comportamiento!
Define la función remove_the_mean_person() que recibe 2 parámetros queue y person_name.
<queue> es la list de personas que están en la fila.<person_name> es el nombre de la persona a la que hay que sacar.Devuelve la fila actualizada sin el nombre de la persona grosera.
>>> remove_the_mean_person(queue=["Natasha", "Steve", "Eltran", "Wanda", "Rocket"], person_name="Eltran")
...
["Natasha", "Steve", "Wanda", "Rocket"]
Puede que no hayas visto a dos personas sin ningún parentesco que se vean exactamente iguales, ¡pero definitivamente has visto a personas sin parentesco con exactamente el mismo nombre (tocayos)! Hoy parece que hay muchos de ellos entre los presentes. Quieres saber cuántas veces aparece un nombre en particular en la fila.
Define la función how_many_namefellows() que recibe 2 parámetros queue y person_name.
<queue> es la list de personas que están en la fila.<person_name> es el nombre que crees que podría aparecer más de una vez en la fila.Devuelve el número de apariciones de person_name, como un int.
>>> how_many_namefellows(queue=["Natasha", "Steve", "Eltran", "Natasha", "Rocket"], person_name="Natasha")
...
2
Lamentablemente, hoy el parque está demasiado lleno y necesitas eliminar a la última persona de la fila normal (le darás un cupón para volver a la vía rápida otro día).
Tendrás que definir la función remove_the_last_person() que recibe 1 parámetro, queue, que es la lista de personas que están en la fila.
Debes actualizar la list y también devolver con return el nombre de la persona que se eliminó, para que puedas escribirle un cupón.
>>> remove_the_last_person(queue=["Natasha", "Steve", "Eltran", "Natasha", "Rocket"])
...
'Rocket'
Por motivos administrativos, necesitas obtener todos los nombres de una fila dada en orden alfabético.
Define la función sorted_names() que recibe 1 argumento, queue (la list de personas que están en la fila), y devuelve una copia sorted de la list.
>>> sorted_names(queue=["Natasha", "Steve", "Eltran", "Natasha", "Rocket"])
...
['Eltran', 'Natasha', 'Natasha', 'Rocket', 'Steve']
Regístrate en Exercism para aprender y dominar Python con 17 conceptos146 ejercicios y mentoría humana real, todo gratis.