Un list es una colección mutable de elementos en secuencia.
Como la mayoría de las colecciones (consulta los tipos integrados tuple, dict y set), los arrays pueden contener referencias a cualquier tipo de dato (o a varios), incluidos otros arrays.
Los arrays se pueden copiar total o parcialmente mediante la notación de rebanadas o usando <list>.copy().
Como ocurre con cualquier secuencia, se hace referencia a los elementos de lists mediante un número 0-based index desde la izquierda, o -1-based index desde la derecha.
Los arrays admiten tanto operaciones de secuencia comunes como operaciones de secuencia mutables, como min(<list>)/max(<list>), <list>.index(), <list>.append() y <list>.reverse().
Se puede iterar por los elementos de un list con la construcción for item in <list>.
Se puede usar for index, item in enumerate(<list>) cuando se necesitan tanto el índice como el valor del elemento.
Python también ofrece muchos métodos de array útiles para trabajar con arrays.
A continuación se explican algunos de estos list methods.
Ten en cuenta que, cuando manipulas un list con un list-method, alteras el array que se ha pasado.
Si no quieres modificar el list original, tendrás que hacer al menos una shallow copy de él mediante un slice o <list>.copy().
Para añadir un elemento al final (el «lado derecho») de un array existente, usa <list>.append(<item>):
>>> numbers = [1, 2, 3]
>>> numbers.append(9)
>>> numbers
[1, 2, 3, 9]
En lugar de añadir al final, <list>.insert() te permite añadir el elemento en un índice concreto del array.
Acepta dos parámetros:
<index> en el que quieres insertar el elemento.<item> que se va a insertar.Nota: Si el index indicado es 0, el elemento se añadirá al principio (el «lado izquierdo») del list.
Si el index indicado es mayor que el último index del list, el elemento se añadirá 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 un array existente con los elementos de otro iterable (por ejemplo, un set, tuple, str o list).
El iterable se desempaqueta y los elementos se añaden en orden (usar <list>.append(<item>) en este caso añadiría todo el iterable como un único 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 un array, 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 el 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 y return un elemento para que puedas usarlo.
<list>.pop(<index>) acepta un parámetro opcional: el index del elemento que se va a eliminar y devolver.
Si no se especifica el argumento (opcional) index, se eliminará y devolverá el último elemento del 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 un list con list.clear(). No acepta ningún parámetro.
>>> numbers = [1, 2, 3]
>>> numbers.clear()
>>> numbers
[]
El método <list>.reverse() invierte el orden de los elementos in situ.
>>> numbers = [1, 2, 3]
>>> numbers.reverse()
>>> numbers
[3, 2, 1]
Se puede reordenar un array in situ con la ayuda de <list>.sort().
El orden de ordenación predeterminado es ascendente desde la izquierda.
La documentación de Python ofrece más consejos y técnicas 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 modificar el array 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 apariciones de un elemento en un array se puede calcular con list.count(<item>).
Acepta como argumento el item que se va a contar y devuelve el número total de veces que ese elemento aparece en el list.
>>> items = [1, 4, 7, 8, 2, 9, 2, 1, 1, 0, 4, 3]
>>> items.count(1)
3
<list>.index(<item>) devuelve el número de index de la primera aparición del elemento que se le pasa.
Si no hay ninguna aparición, se lanza un ValueError.
Si no necesitas la posición exacta de un elemento, el operador integrado in es más eficiente para comprobar si un array 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, empezando por -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 concreta del list:
>>> names = ["Tina", "Leo", "Thomas", "Tina", "Emily", "Justin"]
>>> names.index("Tina")
0
>>> names.index("Tina", 2, 5)
3
Chaitana es la dueña de un parque de atracciones muy popular. Solo tiene una atracción, en el centro mismo de unos terrenos bellamente ajardinados: La Montaña Rusa Más Grande del Mundo(TM). Aunque solo hay esta atracción, gente de todo el mundo viaja y hace cola durante horas para tener la oportunidad de subir a la hipermontaña rusa de Chaitana.
Hay dos colas para esta atracción, cada una representada como un list:
Te han pedido que escribas algo de código para gestionar mejor a los visitantes del parque. Tienes que implementar las siguientes funciones cuanto antes, antes de que los visitantes (¡y tu jefa, Chaitana!) se impacienten. Asegúrate de leer con atención. Algunas tareas te piden que cambies o actualices la cola existente, mientras que otras te piden que hagas una copia.
Define la función add_me_to_the_queue(), que toma 4 parámetros <express_queue>, <normal_queue>, <ticket_type>, <person_name> y devuelve la cola correspondiente actualizada con el nombre de la persona.
<ticket_type> es un int con 1 == express_queue y 0 == normal_queue.<person_name> es el nombre (como str) de la persona que se va a añadir a la cola 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 ha llegado tarde al parque, pero quiere unirse a la cola donde esperan sus amigos. Sin embargo, no tiene ni idea de dónde están sus amigos y no hay cobertura para llamarlos.
Define la función find_my_friend(), que toma 2 parámetros, queue y friend_name, y devuelve la posición en la cola del nombre de la persona.
<queue> es la list de personas que están en la cola.<friend_name> es el nombre del amigo cuyo índice (su lugar en la cola) tienes que encontrar.Recuerda: la indexación empieza en 0 por la izquierda y en -1 por la derecha.
>>> find_my_friend(queue=["Natasha", "Steve", "T'challa", "Wanda", "Rocket"], friend_name="Steve")
...
1
Ahora que ya se han encontrado sus amigos (en la tarea n.º 2 anterior), a quien llegó tarde le gustaría unirse a ellos en su lugar de la cola.
Define la función add_me_with_my_friends(), que toma 3 parámetros, queue, index y person_name.
<queue> es la list de personas que están en la cola.<index> es la posición en la que debe añadirse la nueva persona.<person_name> es el nombre de la persona que hay que añadir en la posición indicada por el índice.Devuelve la cola 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 oír en la cola que hay una persona muy mal educada que empuja, grita y arma jaleo. ¡Tienes que echar a ese sinvergüenza por su mal comportamiento!
Define la función remove_the_mean_person(), que toma 2 parámetros, queue y person_name.
<queue> es la list de personas que están en la cola.<person_name> es el nombre de la persona a la que hay que echar.Devuelve la cola actualizada sin el nombre de la persona mal educada.
>>> remove_the_mean_person(queue=["Natasha", "Steve", "Eltran", "Wanda", "Rocket"], person_name="Eltran")
...
["Natasha", "Steve", "Wanda", "Rocket"]
Puede que no hayas visto nunca a dos personas sin ningún parentesco que sean idénticas, ¡pero desde luego que has visto a personas sin parentesco con exactamente el mismo nombre (tocayos)! Hoy parece que hay un montón de ellos en el parque. Quieres saber cuántas veces aparece un nombre concreto en la cola.
Define la función how_many_namefellows(), que toma 2 parámetros, queue y person_name.
<queue> es la list de personas que están en la cola.<person_name> es el nombre que crees que puede aparecer más de una vez en la cola.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
Por desgracia, hoy el parque está abarrotado y tienes que quitar a la última persona de la cola normal (le darás un vale para volver otro día por la vía rápida).
Tendrás que definir la función remove_the_last_person(), que toma 1 parámetro, queue, que es el array de personas que están en la cola.
Debes actualizar la list y también hacer return del nombre de la persona que se ha quitado, para poder escribirle un vale.
>>> remove_the_last_person(queue=["Natasha", "Steve", "Eltran", "Natasha", "Rocket"])
...
'Rocket'
Por motivos administrativos, necesitas obtener todos los nombres de una cola determinada en orden alfabético.
Define la función sorted_names(), que toma 1 argumento, queue, (la list de personas que están en la cola), 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.