Python - Lección 7: Secuencias (listas)

Secuencias (listas)

Hasta ahora vimos el tipo más básico de variables dentro del lenguaje, ahora nos toca subir un poquito el volúmen y continuar con el resto de las variables que utilizaremos para programar.
En el primer lugar, tenemos a las listas. Imagina que necesitamos almacenar muchos datos y por la enorme o indefinida cantidad de los mismos nos resultaría difícil especificar una variable para cada dato en específico. Es en este momento en donde necesitamos de las secuencias. Estas, son variables que pueden almacenar uno o incontables datos dentro de sí mismas, podemos añadir más elementos, quitarlos o trabajarlos según nuestra conveniencia.
Vamos a comenzar con un ejemplo para mostrar su sintáxis y en qué consisten.

mi_primera_lista = ['Elemento1', 2, 3.4]
print (mi_primera_lista)

Como ven, las listas pueden almacenar datos de diferentes tipos separados entre sí por comas. Estos datos, deben contenerse entre llaves cuadradas y los que sean de tipo string, como siempre entre comillas.

Otra particularidad de las secuencias, es que pueden contener más secuencias adentro, de esta manera, nuestros datos estarán agrupados y organizados dentro de una sóla variable.

autos = [['Mitsubishi EVO X', 2009], ['Ford Mustang', 2018], ['Chevrolet El Camino', 1986]]

print (autos)

Con la función list(), podemos convertir una cadena string en elementos de una lista, en donde cada caracter del string es un elemento diferente dentro de la misma.

mi_lista = list('123456789')

print(mi_lista)

Podemos elegir la cantidad de elementos de la lista que queremos imprimir detallando el índice o el rango de índices de los elementos de dicha lista dentro de llaves cuadradas (El primer índice comienza en 0).

mi_lista = list('LinuxChad')

print (mi_lista[0])
print (mi_lista[1:4])
print (mi_lista[:4])
print [mi_lista[5:]]

También podemos combinar los elementos de dos listas para formar una nueva.

mi_lista = list('01234')
nueva_lista = list('56789')

print (mi_lista + nueva_lista)

secuencias08

Ahora vamos a ver cómo reemplazar, añadir y remover elementos de las listas respectivamente.

mi_lista = list('012345')
print (mi_lista)

mi_lista[1] = '5ombr4'
print (mi_lista)

mi_lista.append = 236
print (mi_lista)

mi_lista.pop(5)
print (mi_lista)

Lo siguiente es ver cómo ordenar las listas. Como ejemplo, vamos a usar una lista con elementos del tipo string y otra con valores enteros.

`strings_desordenados = ['z','c','d','a','b','g','l','j','h']
print (f'Lista de caracteres desordenados: {strings_desordenados}')
strings_desordenados.sort()
print (f'Lista de caracteres ordenados: {strings_desordenados}')

enteros_desordenados = ['3','1','14','9','17','0','4','7']
print (f'Lista de enteros desordenados: {enteros_desordenados}')
enteros_desordenados.sort()
print (f'Lista de enteros ordenados: {enteros_desordenados}')

NOTA: Si queremos invertir el orden de una lista, debemos utilizar el comando .reverse()

Para finalizar con el tema, voy a dejarles una lista de operaciones que pueden realizar con las listas.

<Tema anterior - Siguiente tema>

7 Me gusta

Probando los comandos, he encontrado lo que creo que es un error aquí:

Cuando intento usarlo así, como .append=valor, la terminal me arroja un error . Cuando lo uso como en el ejemplo, como .append(valor), sí funciona.

Sigo estudiando. Gracias por el curso. :wink:

1 me gusta

Curioso, a mí no me arroja error.
Bueno, me alegro que hayas encontrado una forma de que te funcione.

1 me gusta

Más cositas:

Puedo usar len(lista) sin problema, pero en todos los intentos que he hecho de usar lista.len() me da error. He probado con listas simples y anidadas, con una lista1 como elemento de una lista2 ( lista1=[‘uno’, ‘dos’, ‘tres’] lista2=[‘algo’, ‘nada’, lista1, ‘paco’] ). El terminal me dice que “.len no es un atributo de lista”.
Pego un ejemplo de lo que he intentado:

lista1=['uno', 'dos', 'tres']
lista2=['algo', 'nada', lista1, 'paco']
# print(lista1.len())
# print(lista1.len(0))
# print(lista2.len(2))
# print(lista2.len(lista1))

NOTA: Los # de comentario son para que permita continuar la ejecución. Hay que descomentar cada línea que se quiera probar.
En todas ellas da el mismo error. No sé qué estoy haciendo mal.

Hola, la manera correcta de usar len() es:

len(lista1) # retorna 3
len(lista2) # retorna 4

Puedes ver la descripción de la función de la siguiente manera:

>>> help(len)
Help on built-in function len in module builtins:

len(obj, /)
    Return the number of items in a container.

No puede ser lista1.len() por cuestiones de diseño. len() es una metodo built-in (o metodo magico) en Python que funciona con muchos tipos de datos distintos (creo que solo los built-in). Por ejemplo, puedes obtener la longitud de una tupla con el mismo len():

mi_tupla = (1, 2, 3)
print(len(mi_tupla)) # retorna 3

Si quieres consultar los métodos y atributos de cierta estructura de datos, puedes usar la función dir():

>>> print(dir(lista1))
['__add__', '__class__', '__class_getitem__', '__contains__', 
'__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', 
'__format__', '__ge__', '__getattribute__', '__getitem__', 
'__gt__', '__hash__', '__iadd__', '__imul__', '__init__', 
'__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', 
'__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', 
'__repr__', '__reversed__', '__rmul__', '__setattr__', 
'__setitem__', '__sizeof__', '__str__', '__subclasshook__', 
'append', 'clear', 'copy', 'count', 'extend', 'index', 
'insert', 'pop', 'remove', 'reverse', 'sort']

Entonces, lista1.__len__() es lo que buscas, este es un metodo definido especificamente en la clase list


Desventajas? no es tan legible como len(lista(1).

Saludos y happy hacking!

1 me gusta

Si te fijas bien, abajo de esa parte está la manera correcta de hacerlo. Honestamente no se porque está dos veces, una bien y otra mal.

En la primer columna de la tabla de funciones y propiedades de las listas, tiene una simbología que voy a explicar a continuación:

  • X: Se refiere a un elemento dentro de la lista.
  • A: Hace referencia a la propia lista.
  • i: Valor de inicio de recorrido.
  • j: Valor de cierre del recorrido.
  • k: Valor de saltos en el recorrido.

Ahora no tengo la PC a mano, ni bien pueda, subo un repaso y unos ejemplos más para que se entienda mejor.

Muchas gracias. Eso resuelve completamente mi duda, y varias más. :wink:
Para empezar, saber que existe help(función) me ayudará mucho, porque los buscadores cada día funcionan peor (ayer mismo estuve buscando sobre list y no encontré nada).
No sé ni lo que es un “método”, ni sé trabajar con objetos. En mis tiempos, lo más complejo que había eran las subrutinas (gosub, del BASIC). Llevo unos 30 años de retraso. :sweat_smile:

Ahora estoy un poco atascado con las tuplas, pero seguiré dedicando mis ratos libres a avanzar con tu magnífico curso. Estoy deseando llegar a los bucles y los condicionales, que es cuando se pueden empezar a hacer cosas interesantes. ¡Muchas gracias!

Mira, te recomiendo tener siempre a mano w3schools, no solo por Python, sino por cualquier lenguaje que quieras aprender.
Es una página en donde explica cada función principal del lenguaje, da ejemplos, tiene su propio curso básico. A mí me ayuda mucho como ayuda memoria con las etiquetas de HTML, cosa que toco muy poco y siempre tengo que estar buscando que hacia cada cosa :joy:

1 me gusta