Son tipos de datos "simples". A medida que los programas toman mas complejidad, necesitamos otras estructuras para resolver los problemas.
Supongamos que necesitamos escribir un programa que se registren los nombres de las primeras diez personas que llegaron al curso en un determinado día.
Como sabemos que son diez, podríamos definir diez variables de tipo string para registrar cada uno de los nombres.
Si bien esta solución parecería ser la mas sencilla, no escala. Es decir, luego se nos pide hacer que registremos las primeras 200 personas que llegan a un auditorio y tenemos que reescribir el código y definiendo 200 variables.
A veces necesitamos almacenar muchos datos y es útil contar con estructuras de datos que nos permitan realizar las operaciones necesarias, mantenerlas ordenadas y sea fácil acceder a los datos.
Teniendo este problema como base, veremos como nos pueden ayudar las estructuras de datos Arrays y Listas.
“Es una zona de almacenamiento contiguo (en la memoria) que contiene una serie de elementos del mismo tipo.”
En otras palabras, es una variable que tiene espacio en la memoria para almacenar varios* elementos del mismo tipo. Pueden ser, int, float, strings... etc.
*En los arrays, el espacio se reserva en el momento de definir la variable y luego no puede cambiar.
“Un vector o arreglo lineal es un tipo de dato arreglo con un índice, es decir con una dimensión.”
Por lo general se usa el término arreglo o array para referirse a un vector.
// Declaración de array de números enteros
int arreglo_clase[7] = {5, 27, 43, 12, 8, 7, 0};
// Accedo al elemento en la posición 5
int x = arreglo_clase[5]; // El valor de x será 7
Podemos caer fuera de rango
// Se declara un array vacío de longitud 10
int arreglo_vacio[10];
arreglo_vacio[9] = 22;
arreglo_vacio[10] = 224;
¿Qué pasará luego de ejecutar la línea 6?
¡ERROR! Out of range
Como el índice empieza en 0 si sumamos 10 llegamos a 9. Al tratar de poner un valor en la posición 10 dará un error fuera de rango.
Son arreglos de dos dimensiones. Se puede ver como una estructura que tiene filas por un lado y columnas por otro. Un índice se usará para localizar las filas y el otro índice para localizar las columnas.
// Definimos una matriz de 3 filas por 3 columnas
int matriz[3][3];
Python no tiene el concepto de array como estuvimos viendo recién. Pero se puede implementar con listas o ndarray usando la librería NumPy.
“Una lista es un dato abstracto que representa una secuencia ordenada de valores, donde el mismo valor puede ocurrir más de una vez (pueden repetirse). ”
Muchos lenguajes de programación proporcionan soporte para tipos de dato de la lista, y tienen sintaxis especiales y semánticas para listas y operaciones de lista.
Las listas son usualmente implementadas como listas enlazadas o como arrays de longitud variable o array dinámicos.
“Las listas en Python son un tipo de dato que permite almacenar datos de cualquier tipo. Son mutables y dinámicas.”
En Python podemos imaginarnos las listas como si fueran arrays, dado que podemos usar índices para acceder a los elementos.
[].
[] # Esto es una lista vacía
[1,2,3,4] # Una lista con 4 elementos enteros
lista_vacia = [] # Variable tipo lista.
otra_lista_vacia = list() # Otra forma
lista_numeros = [1,2,3,4] # Una variable tipo lista
Por lo general, las listas se usan asignándolas a variables, para que de esa manera puedan modificarse y consultarse. De otra manera el dato se perderá.
# Lista de strings
lista_nombres = ["Juan", "Sebastián", "Cristian"]
# Una lista puede ser heterogénea con elementos distinto tipo
lista_nueva = [1,"Hola",3.44,[1,2,3]]
# Imprimir listas
print(lista_nombres)
print(lista_nueva)
['Juan', 'Sebastián', 'Cristian']
[1, 'Hola', 3.44, [1, 2, 3]]
Try it yourself!
Si tenemos una lista a con 3 elementos almacenados en ella, podemos acceder a los mismos usando corchetes y un índice, que va desde 0 a n-1 siendo n el tamaño de la lista.
a = [90, "Python", 3.87]
print(a[0]) #90
print(a[1]) #Python
print(a[2]) #3.87
print(a[-1]) #3.87 -> El último elemento
print(a[-2]) #Python -> El ante último
a[1] = "Hola"
print (a[1]) # Hola
Se modificó el elemento en el índice [1]
lista = [5, 9, 10]
for e in lista:
print(e)
#5
#9
#10
La "variable" "e" dentro del for se refiere al elemento actual de la lista.
El nombre de esa variable es opcional y puede ser cualquier nombre válido para una variable cualquiera.
Dentro de la iteración, podemos tratar al elemento de la lista como una variable cualquiera.
lista = [5, 3, 9, 10]
for l in lista:
if l => 9:
print (l)
¿Qué dará como salida el programa?
9
10
alumnxs = ["Matias", "Ana", "Juan", "Victoria"]
for a in alumnxs:
if a == "Juan":
print(f"¡Hola {a}!")
else:
print(a)
¿Qué dará como salida el programa?
Matias
Ana
¡Hola Juan!
Victoria
Python (como otros lenguajes) nos proveen funciones, métodos o herramientas para interactuar o manipular listas. A continuación veremos algunos métodos con ejemplos.
El método append() añade un elemento al final de la lista.
l = [1, 2]
l.append(3)
print(l) #[1, 2, 3]
l.append("¡Hola!")
print(l) #[1, 2, 3, 'Hola']
El método insert(indice, elem) añade un elemento en una posición o índice determinado. Recordar que el primer elemento es el índice[0].
l = [1, 3]
l.insert(1, 2) #[1, 2, 3]
l.insert(2,99) # [1, 2, 99, 3]
l.insert(15,6) # Out of range?...
Python se da cuenta que está fuera de rango y lo inserta al final.
[1, 2, 99, 3, 6]
PERO si se intenta agregar con un índice fuera de rango sí dará error.
l[90] = 0 # IndexError: list assignment index out of range
El método remove(elem) recibe como argumento un objeto y lo borra de la lista.
l = [1, 2, 3]
l.remove(3)
print(l) #[1, 2]
El método pop() retorna el último elemento de la lista y lo borra. Si se pasa como parámetro un índice permite retornar y borrar elementos diferentes al último.
l = [1, 2, 3]
l.pop()
print(l) #[1, 2]
print(l.pop()) #
El método index(elem) recibe como argumento un elemento y retorna el número del índice donde se encuentra.
l = ['Vaca', 'Pato', 'Gato', 'Gallina']
indice = l.index('Gato')
print(indice) # Será 2.
l = ['Vaca', 'Pato', 'Gato', 'Gallina']
indice = l.index('Pez')
ValueError: 'Pez' is not in list
... y el programa terminará.
El método reverse() invierte el orden de la lista.
l = [1, 2, 3]
l.reverse()
print(l) #[3, 2, 1]
El método sort() ordena los elementos de menor a mayor por defecto.
l = [3, 1, 2]
l.sort()
print(l) #[1, 2, 3]
El método len( retorna un número con la cantidad de elementos de la lista.
l = [3, 1, 2, 9, 12]
cant = len(l)
print(cant) # 5
De esta manera se puede saber por sí o por no (True/False) si un elemento está en una lista.
list = [1,2,3,4,5,6]
print (1 in list) # True
print (8 in list) # False
A continuación se presenta una lista anidada y como recorrerla.
nom_y_edad = [["Alberto", 60], ["Avril", 21],
["Manuel", 37], ["Gabriel", 40], ["Mai", 20]]
# Recorrer e informar nombre y edad
for nombre in nom_y_edad:
print(f"{nombre[0]} tiene {nombre[1]} años.")
Alberto tiene 60 años.
Avril tiene 21 años.
Manuel tiene 37 años.
Gabriel tiene 40 años.
Mai tiene 20 años.
Otra forma de recorrer la misma lista. Este método es mas intuitivo.
nom_y_edad = [["Alberto", 60], ["Avril", 21],
["Manuel", 37], ["Gabriel", 40], ["Mai", 20]]
for nombre, edad in nom_y_edad:
print(f"{nombre} tiene {edad} años.")
Alberto tiene 60 años.
Avril tiene 21 años.
Manuel tiene 37 años.
Gabriel tiene 40 años.
Mai tiene 20 años.
Cinco veces en el código de más arriba dará mas luz a tu conocimiento ;)
| Método | Descripción | Ejemplo |
|---|---|---|
append() |
Agrega un elemento al final | l.append(elem) |
clear() |
Borra todos los elementos de la lista. | l.clear() |
copy() |
Copia una lista * | nueva = l.copy() |
count() |
Indica la cantidad de elementos de un valor especificado | l.count(4) |
extend() |
Agrega elementos al final de la lista. Pueden ser varios elementos. | l.extend(otra_lista) |
index() |
Retorna el índice del primer elemento de un valor especificado. | l.index('auto') |
* ¿Por qué es necesario este método?. Ver este ejemplo.
| Método | Descripción | Ejemplo |
|---|---|---|
insert() |
Agrega un elemento en una posición especificada. | l.insert(2,'auto') |
pop() |
Remueve y retorna un elemento de una posición especificada. Por defecto el último. | l.pop() | l.pop(2) |
remove() |
Borra el primer elemento de la lista que coincida con un elemento especificado | l.remove('auto') |
reverse() |
Invierte el orden de la lista | l.reverse() |
sort() |
Ordena la lista. | l.sort() |
Escriba un programa que dada la lista [1, 2, 3, 4, 5, 6, 7] convierta cada elemento a su cuadrado (n*n) en una lista nueva y luego imprima por pantalla la nueva lista.
Escriba un programa que pida al usuario nombres de personas hasta que llegue "Juan" el cual debe ser agregado a la lista. Al finalizar el programa debe imprimir los nombres con la letra capitalizada.
Debe también decir la cantidad de personas que llegaron.