Introducción
A list is a data structure in Python that is a mutable, or changeable, ordered sequence of elements. Each element or value that is inside of a list is called an item. Just as strings are defined as characters between quotes, lists are defined by having values between square brackets [ ]
.
Las listas son excelentes para usar cuando quieres trabajar con muchos valores relacionados. Te permiten mantener juntos los datos que pertenecen juntos, condensar tu código y realizar los mismos métodos y operaciones en múltiples valores a la vez.
Al pensar en las listas de Python y otras estructuras de datos que son tipos de colecciones, es útil considerar todas las diferentes colecciones que tienes en tu computadora: tu surtido de archivos, tus listas de reproducción de canciones, tus marcadores de navegador, tus correos electrónicos, la colección de videos a los que puedes acceder en un servicio de streaming, y más.
Prerrequisitos
Debes tener instalado Python 3 y un entorno de programación configurado en tu computadora o servidor. Si no tienes configurado un entorno de programación, puedes consultar las guías de instalación y configuración para un entorno de programación local o para un entorno de programación en tu servidor apropiado para tu sistema operativo (Ubuntu, CentOS, Debian, etc.).
Listas de cadenas
Para comenzar, creemos una lista que contenga elementos del tipo de datos cadena:
Información: Para seguir el ejemplo de código en este tutorial, abre un shell interactivo de Python en tu sistema local ejecutando el comando python3
. Luego puedes copiar, pegar o editar los ejemplos agregándolos después del indicador >>>
.
Cuando imprimimos la lista, la salida responde exactamente como la lista que creamos:
Output['shark', 'cuttlefish', 'squid', 'mantis shrimp', 'anemone']
Como una secuencia ordenada de elementos, cada ítem en una lista puede ser llamado individualmente, mediante indexación. Las listas son un tipo de datos compuesto formado por partes más pequeñas, y son muy flexibles porque pueden tener valores agregados, eliminados y modificados. Cuando necesites almacenar muchos valores o iterar sobre valores, y quieras poder modificar esos valores fácilmente, probablemente quieras trabajar con tipos de datos de lista.
En este tutorial, veremos algunas de las formas en que podemos trabajar con listas en Python.
Indexación de listas
Cada ítem en una lista corresponde a un número de índice, que es un valor entero, comenzando con el número de índice 0
.
Para la lista sea_creatures
, la descomposición de índices se ve así:
‘shark’ | ‘cuttlefish’ | ‘squid’ | ‘mantis shrimp’ | ‘anemone’ |
---|---|---|---|---|
0 | 1 | 2 | 3 | 4 |
El primer elemento, la cadena 'shark'
comienza en el índice 0
, y la lista termina en el índice 4
con el elemento 'anemone'
.
Debido a que cada elemento en una lista de Python tiene un número de índice correspondiente, podemos acceder y manipular listas de la misma manera que podemos hacerlo con otros tipos de datos secuenciales.
Ahora podemos llamar a un elemento específico de la lista refiriéndonos a su número de índice:
Outputcuttlefish
Los números de índice para esta lista van desde 0
a 4
, como se muestra en la tabla anterior. Entonces, para llamar a cualquiera de los elementos individualmente, nos referiríamos a los números de índice de esta manera:
Si llamamos a la lista sea_creatures
con un número de índice mayor que 4, estará fuera de rango ya que no será válido:
OutputIndexError: list index out of range
Además de los números de índice positivos, también podemos acceder a elementos de la lista con un número de índice negativo, contando hacia atrás desde el final de la lista, comenzando en -1
. Esto es especialmente útil si tenemos una lista larga y queremos señalar un elemento hacia el final de una lista.
Para la misma lista sea_creatures
, la descomposición de índices negativos se ve así:
‘shark’ | ‘cuttlefish’ | ‘squid’ | ‘mantis shrimp’ | ‘anemone’ |
---|---|---|---|---|
-5 | -4 | -3 | -2 | -1 |
Entonces, si queremos imprimir el elemento 'squid'
usando su número de índice negativo, podemos hacerlo de esta manera:
Outputsquid
Podemos concatenar elementos de cadena en una lista con otras cadenas usando el operador +
:
OutputSammy is a shark
Pudimos concatenar el elemento de cadena en el índice número 0
con la cadena 'Sammy is a '
. También podemos usar el operador +
para concatenar 2 o más listas juntas.
Con los números de índice que corresponden a elementos dentro de una lista, podemos acceder a cada elemento de una lista de forma discreta y trabajar con esos elementos.
Modificando Elementos en Listas
Podemos usar la indexación para cambiar elementos dentro de la lista, estableciendo un número de índice igual a un valor diferente. Esto nos da un mayor control sobre las listas, ya que podemos modificar y actualizar los elementos que contienen.
Si queremos cambiar el valor de cadena del elemento en el índice 1
de 'cuttlefish'
a 'octopus'
, podemos hacerlo así:
Ahora, cuando imprimimos sea_creatures
, la lista será diferente:
Output['shark', 'octopus', 'squid', 'mantis shrimp', 'anemone']
También podemos cambiar el valor de un elemento usando un número de índice negativo en su lugar:
Output['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone']
Ahora 'blobfish'
ha reemplazado a 'squid'
en el número de índice negativo de -3
(que corresponde al número de índice positivo de 2
).
La capacidad de modificar elementos en listas nos da la capacidad de cambiar y actualizar listas de una manera eficiente.
Cortando listas
También podemos seleccionar algunos elementos de la lista. Digamos que queremos imprimir solo los elementos intermedios de sea_creatures
, podemos hacerlo creando una rebanada. Con las rebanadas, podemos seleccionar varios valores creando un rango de números de índice separados por dos puntos [x:y]
:
Output['octopus', 'blobfish', 'mantis shrimp']
Al crear una rebanada, como en [1:4]
, el primer número de índice es donde comienza la rebanada (inclusive), y el segundo número de índice es donde termina la rebanada (exclusivo), por eso en nuestro ejemplo anterior los elementos en la posición 1
, 2
y 3
son los elementos que se imprimen.
Si queremos incluir uno de los extremos de la lista, podemos omitir uno de los números en la sintaxis lista[x:y]
. Por ejemplo, si queremos imprimir los primeros 3 elementos de la lista sea_creatures
— que serían 'tiburón'
, 'pulpo'
, 'pez blob'
— podemos hacerlo escribiendo:
Output['shark', 'octopus', 'blobfish']
Esto imprimió el principio de la lista, deteniéndose justo antes del índice 3
.
Para incluir todos los elementos al final de una lista, invertiríamos la sintaxis:
Output['blobfish', 'mantis shrimp', 'anemone']
También podemos usar números de índice negativos al cortar listas, similar a los números de índice positivos:
Output['octopus', 'blobfish']
['blobfish', 'mantis shrimp', 'anemone']
Un último parámetro que podemos usar con el slicing se llama stride, que se refiere a cuántos elementos avanzar después de que se recupera el primer elemento de la lista. Hasta ahora, hemos omitido el parámetro de stride, y Python utiliza el valor predeterminado de 1, de modo que se recuperan todos los elementos entre dos números de índice.
La sintaxis para esta construcción es lista[x:y:z]
, donde z
se refiere al stride. Hagamos una lista más grande, luego la dividiremos y le daremos al stride un valor de 2:
Output[1, 3, 5, 7, 9]
Nuestra construcción numeros[1:11:2]
imprime los valores entre los números de índice inclusivos de 1
y exclusivos de 11
, luego el valor de stride de 2
le dice al programa que imprima solo cada otro elemento.
Podemos omitir los dos primeros parámetros y usar solo el stride como un parámetro con la sintaxis lista[::z]
:
Output[0, 3, 6, 9, 12]
Al imprimir la lista numeros
con el stride establecido en 3
, solo se imprime cada tercer elemento:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
El slicing de listas con números de índice positivos y negativos e indicando el stride nos proporciona el control para manipular listas y recibir la salida que estamos intentando lograr.
Modificación de Listas con Operadores
Los operadores se pueden utilizar para hacer modificaciones a las listas. Revisaremos el uso de los operadores +
y *
y sus formas compuestas +=
y *=
.
El operador +
se puede utilizar para concatenar dos o más listas juntas:
Output['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']
Debido a que el operador +
puede concatenar, se puede usar para agregar un elemento (o varios) en forma de lista al final de otra lista. Recuerda colocar el elemento entre corchetes:
Output['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']
El operador *
se puede utilizar para multiplicar listas. Tal vez necesites hacer copias de todos los archivos en un directorio en un servidor, o compartir una lista de reproducción con amigos; en estos casos necesitarías multiplicar colecciones de datos.
Vamos a multiplicar la lista sea_creatures
por 2 y la lista oceans
por 3:
Output['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']
['Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']
Al usar el operador *
podemos replicar nuestras listas el número de veces que especifiquemos.
También podemos usar formas compuestas de los operadores +
y *
con el operador de asignación =
. Los operadores compuestos +=
y *=
se pueden utilizar para poblar listas de manera rápida y automatizada. Puedes usar estos operadores para completar listas con marcadores de posición que puedes modificar más adelante con la entrada proporcionada por el usuario, por ejemplo.
Agreguemos un elemento en forma de lista a la lista sea_creatures
. Este elemento actuará como marcador de posición, y nos gustaría agregar este elemento marcador de posición varias veces. Para hacer esto, usaremos el operador +=
con un for loop.
Output['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'fish']
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'fish', 'fish']
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'fish', 'fish', 'fish']
En cada iteración del bucle for, se agrega un elemento adicional de 'fish'
a la lista original sea_creatures
.
El operador *=
se comporta de manera similar:
Output['shark', 'shark']
['shark', 'shark', 'shark', 'shark']
['shark', 'shark', 'shark', 'shark', 'shark', 'shark', 'shark', 'shark']
Los operadores +
y *
se pueden utilizar para concatenar listas y multiplicar listas. Los operadores compuestos +=
y *=
pueden concatenar listas y multiplicar listas y pasar la nueva identidad a la lista original.
Eliminación de un elemento de una lista
Los elementos se pueden eliminar de las listas utilizando la declaración del
. Esto eliminará el valor en el número de índice que especifiques dentro de una lista.
De la lista sea_creatures
, vamos a eliminar el elemento 'octopus'
. Este elemento se encuentra en la posición del índice 1
. Para eliminar el elemento, utilizaremos la declaración del
y luego llamaremos a la variable de lista y al número de índice de ese elemento:
Output['shark', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']
Ahora el elemento en la posición del índice 1
, la cadena 'octopus'
, ya no está en nuestra lista sea_creatures
.
También podemos especificar un rango con la declaración del
. Digamos que queremos eliminar no solo el elemento 'octopus'
, sino también 'blobfish'
y 'mantis shrimp'
también. Podemos llamar a un rango en sea_creatures
con la declaración del
para lograr esto:
Output['shark', 'anemone', 'yeti crab']
Al usar un rango con la instrucción del
, pudimos eliminar los elementos entre el número de índice 1
(inclusive) y el número de índice 4
(exclusivo), dejándonos con una lista de 3 elementos después de la eliminación de 3 elementos.
La instrucción del
nos permite eliminar elementos específicos del tipo de dato lista.
Construyendo una Lista con Elementos de Lista
Las listas pueden definirse con elementos que están compuestos por listas, con cada lista entre corchetes encerrada dentro de los corchetes más grandes de la lista padre:
Estas listas dentro de listas se llaman listas anidadas.
Para acceder a un elemento dentro de esta lista, tendremos que usar múltiples índices:
OutputSammy
shark
La primera lista, al ser igual a un elemento, tendrá el número de índice 0, que será el primer número en la construcción, y la segunda lista tendrá el número de índice 1. Dentro de cada lista anidada interna habrá números de índice separados, que llamaremos en el segundo número de índice:
sea_names[0][0] = 'shark'
sea_names[0][1] = 'octopus'
sea_names[0][2] = 'squid'
sea_names[0][3] = 'mantis shrimp'
sea_names[1][0] = 'Sammy'
sea_names[1][1] = 'Jesse'
sea_names[1][2] = 'Drew'
sea_names[1][3] = 'Jamie'
Cuando se trabaja con listas de listas, es importante tener en cuenta que necesitarás referirte a más de un número de índice para acceder a elementos específicos dentro de la lista anidada relevante.
Conclusión
El tipo de dato lista es un tipo de dato flexible que puede ser modificado a lo largo de la ejecución de tu programa. Este tutorial cubrió las características básicas de las listas, incluyendo indexación, segmentación, modificación y concatenación de listas.
A partir de aquí, puedes obtener más información sobre cómo trabajar con listas en Python leyendo “Cómo utilizar los métodos de lista”, y sobre comprensiones de lista para crear listas basadas en listas existentes. Para aprender más sobre los tipos de datos en general, puedes leer nuestro tutorial “Comprendiendo los Tipos de Datos”.
Source:
https://www.digitalocean.com/community/tutorials/understanding-lists-in-python-3