fbpx
Volver a Curso

Curso profesional de Python

0% Completado
0/0 Steps
  1. Antes de iniciar el curso.

    Grupos y Foros
  2. Curso profesional de Python
    Preparación del ambiente de trabajo.
  3. Estructura y elementos del lenguaje
    7 Temas
    |
    1 Cuestionario
  4. Principales métodos del objeto string
    7 Temas
    |
    1 Cuestionario
  5. Tipos de datos complejos
    4 Temas
    |
    1 Cuestionario
  6. Funciones definidas por el usuario
    4 Temas
    |
    1 Cuestionario
  7. Módulos, paquetes y namespaces
    3 Temas
    |
    1 Cuestionario
  8. POO/OOP (Programación Orientada a Objetos)
    8 Temas
    |
    1 Cuestionario
  9. Conversión de tipos
    5 Temas
    |
    1 Cuestionario
  10. Ficheros
    4 Temas
    |
    1 Cuestionario
  11. Bases de datos con SQLITE3
    3 Temas
    |
    1 Cuestionario
  12. Encuesta sobre el curso
  13. Proyecto final
    2 Temas
Lección Progreso
0% Completado

Si bien hablamos de tipos de datos, analicemos un poco más en profundidad sobre las listas, tuplas y diccionarios de Python; ésto nos ayudarán a interpretar mejor nuestro código y nos darán mejores resultado al trabajar estos tipos de datos.

Secuencias

En Python existen 3 tipos de secuencia básicos, las listas (list), las tuplas (tuple) y los rangos (range). Dado que ya conocemos la diferencia entre una lista y una tupla, veamos algunas maneras de recorrer los elementos de una o más listas y luego repasemos algunos métodos de las mismas.

Tal como vimos cuando hablamos de los bucles, es posible recorrer una secuencia utilizando el bucle for. Repasemos.

>>> num_pares = [0, 2, 4, 6, 8, 10]
>>> for num_par in num_pares:
... 	print(num_par)
...
0
2
4
6
8
10
  • Creamos la lista num_pares con los números pares del 0 al 10.
  • La recorremos con un for e imprimimos el valor.
  • Repasando, num_par tendrá un valor diferente en cada iteración. Al cambiar de posición de la lista, irá tomando el valor de dicho elemento.
  • Al acabarse los elementos de la lista, finaliza el bucle for y finaliza el ejemplo.

En cambio, si queremos imprimir la lista en orden inverso, no es necesario que creemos otra lista, solo debemos indicar el “paso” con el que iterará el bucle el for. Por ejemplo:

>>> for num_par in num_pares[::-1]:
... 	print(num_par)
...
10
8
6
4
2
0
  • Volvemos a iterar la lista con el bucle for pero indicando el paso con [::-1].
  • Vemos que los valores se imprimen del último al primero.

¿Qué sucedió aquí exactamente? Tal como vimos, es posible acceder a un elemento de una lista indicando la posición del elemento que deseamos con la expresión lista[posición], pero también es posible acceder una porción de la misma indicando la posición de inicio y de fin. Por ejemplo:

>>> num_pares[2:5]
[4, 6, 8]
  • Si indicamos 2:5 como la porción que deseamos de la lista, vemos que nos devuelve una lista con los elementos desde la posición 2 hasta la posición 4 (el valor de fin no se incluye en el resultado).

Además de esto, también podemos indicar un tercer valor con el paso que deseamos entre elementos. Por ejemplo:

>>> numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> numeros[0:10:2]
[1, 3, 5, 7, 9]
  • Dada una lista de elementos con números del 1 al 10, indicamos que deseamos los valores desde la posición 0 a la 10 (no incluyendo la misma) con un paso de 2.
  • Por lo que vemos, devuelve únicamente los valores del 1 al 9.

Si no se desea acotar entre un rango de elementos, no es necesario indicar las posiciones de inicio y de fin, se pueden obviar. Por ejemplo:

>>> numeros[::2]
[1, 3, 5, 7, 9]
  • No indicamos las posiciones de inicio y fin y vemos que obtenemos el mismo resultado que en el ejemplo anterior.

Ahora, si el “paso” que indicamos es de un valor negativo, esto indicará que la lista será recorrida en sentido inverso. Por ejemplo:

>>> numeros[::-2]
[10, 8, 6, 4, 2]
  • Cambiamos el paso para recorrer la lista a -2.
  • Vemos que el resultado pasó a ser los números pares pero de mayor a menor.
  • Tal como dijimos, la lista comienza a recorrerse desde el último elemento hasta el primero con un paso de 2.

Ahora, volviendo a nuestro ejemplo donde recorríamos los números pares en orden inverso num_pares[::-1], podemos comprender que lo que sucede es que recorremos toda la lista con un paso de -1, por lo que comenzará en la última posición e irá retrocediendo hasta el primero, moviéndose una posición a la vez.

Ahora, supongamos que de nuestra lista de números del 1 al 10, querramos extraer únicamente los números impares para agregarlos a una nueva lista. Si vienes de otro lenguaje de programación quizás te imagines algo como esto:

>>> impares = []
>>> for num in numeros:
... 	if num%2 == 1:
...         	impares.append(num)
...
>>> impares
[1, 3, 5, 7, 9]
  • Crear una lista vacía con el nombre impares
  • Recorrer la lista números.
  • Una vez dentro del for, evaluar si el resto de dividir el elemento por 2 es igual a 1.
  • Si esto ocurre, utilizamos el método append para agregar el elemento a la lista “impares”.
  • Si verificamos su valor, vemos que el funcionamiento es correcto.

Si bien esto es técnicamente posible, podemos lograr lo mismo creando una lista por comprensión, pero, ¿qué es una lista por comprensión?

Hasta ahora, solo vimos una manera de definir listas, por extensión, pero también pueden ser definidas por comprensión. La diferencia entre ambas es que al definir una lista por extensión, se indican todos los elementos de la secuencia uno por uno. En cambio, cuando se crea una secuencia por comprensión, no se indican todos los elementos uno por uno, sino que se indica una propiedad que cumplen todos los elementos para que pasen a formar parte de dicha secuencia. Veamos un ejemplo creando nuestra lista de números impares a partir de una lista de números del 1 al 10.

>>> num_impares = [n for n in numeros if n%2]
>>> num_impares
[1, 3, 5, 7, 9]
  • Creamos una variable num_impares con la expresión [n for n in numeros if n%2].
  • Verificamos el valor y vemos que obtenemos el mismo resultado que en el ejemplo anterior. Pero, qué ocurre aquí?
  • Esto es una lista por comprensión. De hecho, el funcionamiento es muy similar al ejemplo anterior, con la única diferencia que lo hacemos en una línea. Análicémoslo.
  • for n in numeros” itera sobre todos los elementos de la lista numeros y cada elemento es nombrado n.
  • La “n” inicial es el valor que se irá agregando a la lista.
  • Siempre y cuando se cumpla la condición “if n%2“, la cual es evaluada en cada iteración.
  • Si observas, no es necesario evaluar el resultado a 1, dado a que cualquier valor distinto de cero, es considerado como True en un contexto booleano.
  • Mucho más sencillo, ¿no?

Habiendo conocido, diferentes formas en que podemos iterar una lista -y las tuplas-, podemos conocer algunos métodos adicionales a los que vimos cuando conocimos este tipo de dato.

Métodos de listas

Extend

list.extend(iterable)

Añade todos los elementos de iterable a la lista list. Por ejemplo:

>>> numeros = list(range(1, 6))
>>> numeros
[1, 2, 3, 4, 5]
>>> numeros.extend(range(6, 11))
>>> numeros
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  • Creamos una lista numeros utilizando el método list pasando range(1, 6) como argumento.
  • Recordamos que el método list convierte a una lista los elementos de un iterable (puede ser una lista, una tupla, un range, etc).
  • Range devuelve un iterable desde el primer parámetro hasta el segundo -sin incluir el mismo-. Por ello, range(1, 6) devuelve un iterable del 1 al 5.
  • Luego. utilizamos extend pasando como argumento un range de 6 al 10.
  • Como podemos ver, la lista ahora posee 10 elementos.

Insert

list.insert(i, x)

Al igual que list.append(x), agrega el elemento x a la lista list, a diferencia que lo agrega en la posición i, desplazando los siguientes elementos hacia la derecha. Por ejemplo:

>>> frutas = ["peras", "manzanas"]
>>> frutas
['peras', 'manzanas']
>>> frutas.insert(1, "naranjas")
>>> frutas
['peras', 'naranjas', 'manzanas']
  • Creamos la lista frutas con los valores peras y manzanas.
  • Utilizamos el método insert para agregar el valor naranjas en la posición 1.
  • Si observamos el contenido, vemos que se agregó la cadena “naranjas” en la posición 1 y “manzanas” se desplazó a la posición 2.

Clear

list.clear()

Elimina todos los elementos de la lista list. Por ejemplo:

>>> frutas
['peras', 'naranjas', 'manzanas']
>>> frutas.clear()
>>> frutas
[]
  • Utilizamos la misma lista del ejemplo anterior y usamos el método clear.
  • Si observamos el contenido, vemos que se han eliminado todos los elementos.

Sort

list.sort(key=None, reverse=False)

Ordena los elementos de la lista de menor a mayor. Por ejemplo:

>>> numeros = [5,7,2,6]
>>> numeros.sort()
>>> numeros
[2, 5, 6, 7]
  • Creamos una lista de números desordenados.
  • Utiizamos el método sort y vemos que los ordenó de menor a mayor.

Opcionalmente, se puede especificar el parámetro key para especificar el método de comparación para el ordenamiento y reverse para indicar que el orden debe ser inverso (de mayor a menor). Por ejemplo, si queremos obtener la palabra más larga de una frase, podemos realizar lo siguiente:

>>> frase = "El veloz murciélago hindú comía feliz cardillo y kiwi".split()
>>> frase.sort(key=len, reverse=True)
>>> frase
['murciélago', 'cardillo', 'veloz', 'hindú', 'comía', 'feliz', 'kiwi', 'El', 'y']
  • Utilizando el método split(), convertimos la cadena a una lista.
  • Utilizamos el método sort especificando len como valor del argumento key y reverse en True.
  • Con esto decimos que la ordenación debe realizarse por el largo del elemento (cada cadena) y que debe hacerse en orden inverso (de mayor a menor).
  • Si vemos el valor de la lista, vemos que el orden fue el esperado.

Reverse

list.reverse()

Invierte los elementos de una lista. Es equivalente a realizar list[::-1], a diferencia que los valores de la lista son modificados. Por ejemplo:

>>> frase
['murciélago', 'cardillo', 'veloz', 'hindú', 'comía', 'feliz', 'kiwi', 'El', 'y']
>>> frase.reverse()
>>> frase
['y', 'El', 'kiwi', 'feliz', 'comía', 'hindú', 'veloz', 'cardillo', 'murciélago']
  • Si utilizamos la misma lista del ejemplo anterior y utilizamos el método reverse, vemos que la lista queda ordenada de menor a mayor largo de cada palabra.

Copy

list.copy()

Devuelve una copia de la lista y es equivalente a utilizar list[:].