Python Programacion Listas
Python Programacion Listas
Además de los tipos de datos básicos revisados en las secciones anteriores, Python
admite estructuras de datos denominadas colecciones que permiten agrupar datos, los
cuales pueden ser de tipos diferentes. Estos datos estructurados o colecciones son:
Listas, Tuplas, Cadenas de caracteres (strings), Diccionarios y Conjuntos. Los tipos
de datos estructurados se pueden combinar y formar tipos de datos compuestos.
Un caso muy importante del tipo lista, son los arreglos. Los arreglos son listas de una o
más dimensiones cuyos elementos son del mismo tipo (usualmente numérico) y su
manejo se define y realiza con los operadores y funciones de la librería NumPy de gran
importancia para aplicaciones matemáticas. Los arreglos son el soporte para el manejo
computacional de los vectores y matrices.
Las estructuras de datos en el lenguaje Python son tipos de datos dinámicos, es decir
que pueden extenderse o modificarse en forma interactiva y durante la ejecución de
programas.
Una de las propiedades más útiles del lenguaje Python es la facilidad para el manejo de
los componentes de algunas estructuras de datos (listas, arreglos, cadenas de caracteres
y tuplas) mediante una notación especial de los índices que permite referirse o extraer
parte del contenido de la estructura. Esta propiedad se denomina “slicing” (rebanar). La
sintaxis es simple y elegante y será revisada mediante ejemplos y aplicaciones
7.1 Listas
Las listas constituyen el tipo de datos estructurado más importante, versátil y común de
Python. Una lista es una colección de datos que pueden tener diferente tipo. Los datos se
escriben entre corchetes, separados por comas:
Una lista es una estructura de datos dinámina cuyos componentes se pueden modificar.
Las celdas son numeradas desde cero. El primer componente o primera celda, tiene
índice 0. El segundo componente, o segunda celda, tiene índice 1, etc.
Se puede acceder a los componentes de una lista mediante un índice entre corchetes.
Python es muy flexible en la notación de índices para manejo de los componentes. Esta
propiedad se denomina “slicing” (rebanar) y se la revisa en los ejemplos.
Python Programación
184
La representación visual de la lista se puede describir con el siguiente gráfico en el que los
componentes se almacenan en celdas de memoria numeradas desde cero:
>>> x[1]
45 El resultado es un elemento
>>> x[1:2]
[45] El resultado es una lista
>>> x[-4]
73
Python Programación
185
>>> x=[20,40,50,30,70,65,80,90,35]
>>> x[0:9:2] El tercer índice indica el incremento (cada dos
[20, 50, 70, 80, 35] elementos)
>>> x[0:-1:2]
[20, 50, 70, 80]
>>> x[:9:2]
[20, 50, 70, 80, 35]
>>> x[::2]
[20, 50, 70, 80, 35]
>>> x[::3]
[20, 30, 80]
>>> x=[123,'Algebra',[50,70],5,73.25]
>>> x[0]
123
>>> x[1]
'Algebra'
>>> x[2]
[50, 70]
Python Programación
186
>>> x[3]=[40,80]
>>> x
[123, 'Algebra', [50, 75], [40, 80], 73.25]
>>> t=[[123,'María',50.2],[234,'Juan',24.2]]
>>> t[1]
[234, 'Juan', 24.2]
>>> t[1][2]
24.2
>>> x=[[[23,45],['abc',42]],35]
>>> x[0]
[[23, 45], ['abc', 42]]
>>> x[1]
35
>>> x[0][0]
[23, 45]
>>> x[0][1][0]
'abc'
>>> x[0][1][0]='rstu'
>>> x
[[[23, 45], ['rstu', 42]], 35]
Python Programación
187
Los valores de una lista se pueden desempacar asignando a variables. Deben coincidir en
la cantidad de elementos.
>>> t = [34,'abc',42]
>>> a,b,c = t
>>> a
34
>>> b
'abc'
>>> c
42
>>> x=[20,30,45,50,30]
>>> x=[20,30,45,50,'abc',30]
>>> max(x) Error: max, min solo aplicables con listas numèricas
Python Programación
188
Python dispone de dispositivos denominados Clases (se puede entender una clase como
librería) que contienen funciones definidas para ciertas aplicaciones. Estas funciones
también se denominan métodos.
La clase (librería) para manejo de listas se denomina list y es residente en la Python, por
lo que no se necesita importarla.
Al crear una variable u objeto de tipo lista se tiene acceso a las funciones o métodos
definidos en la clase y se los usa con la siguiente notación:
objeto.función
Python Programación
189
>>> x=[34,56,75,56,43]
>>> x.append(28) Agregar elemento con valor 28
>>> x
[34, 56, 75, 56, 43, 28]
>>> k=x.index(56)
>>> k
1
>>> x.reverse()
>>> x
[28, 43, 56, 62, 56, 34]
>>> x=[3,7,8,2,8,5,4,6]
>>> 9 in x Determinar si un elemento está en una lista
False
>>> 8 in x Si el elemento está en la lista el resultado es True
True
>>> x.index(8) En este caso se puede determinar su posición en la lista
2
>>> e=x.pop(6) Entrega el elemento en la posición 6 y lo elimina de la lista
>>> e
4
>>> x
[3, 7, 8, 2, 8, 5, 6]
>>> x=[3,7,8,2,8,5,4,6]
>>> if 9 in x:
x.remove(9)
Python Programación
190
>>> x=[34,56,75,56,43]
>>> x.sort()
>>> x
[34, 43, 56, 56, 75]
>>> x=['Química','Algebra','Física','Biología']
>>> x.sort()
>>> x
['Algebra', 'Biología', 'Física', 'Química']
>>> x=[23,'Algebra','Biología',73,45]
>>> x.sort() No se pueden ordenar tipos diferentes
TypeError: unorderable types: str() < int()
>>> t = [[7, 3], [3, 6], [9, 8],[5, 4]] Ordena el primer componente
>>> t.sort()
>>> t
[[3, 6], [5, 4], [7, 3], [9, 8]]
>>> x=[5,3,5,2]
>>> x=x+[9,3]
>>> x
[5, 3, 5, 2, 9, 3]
>>> a=[27,'abc',4.5]
>>> b=[3.2,73,'rt',35]
>>> c=a+b
>>> c
[27, 'abc', 4.5, 3.2, 73, 'rt', 35]
>>> x=[23,5.27,'lunes',49]
>>> x.append('martes')
>>> x
[23, 5.27, 'lunes', 49, 'martes']
Python Programación
191
>>> x.remove('lunes')
>>> x
[23, 5.27, 49, 'martes']
>>> x.index('martes')
3
>>> x=x+['jueves']
>>> x
[23, 5.27, 49, 'martes', 'jueves']
>>> x=[2,5.1,'lunes']
>>> r=2*x Reproduce la lista dos veces
>>> r
[2, 5.1, 'lunes', 2, 5.1, 'lunes']
Un operador especial para eliminar elementos de una lista mediante el índice: del
>>> x=[3,4,9,7,2,9,6]
>>> del x[3] Elimina el elemento en la celda 3
>>> x
[3, 4, 9, 2, 9, 6]
>>> del x[-1] Elimina el último elemento
>>> x
[3, 4, 9, 2, 9]
>>> x=[3,4,9,7,2,9,6]
>>> del x[2:5] Elimina celdas en un rango
>>> x
[3, 4, 9, 6]
Python Programación
192
>>> s=list(c)
>>> s
[0, 1, 8, 27, 64]
>>> c
[0, 1, 8, 27, 64]
Python Programación
193
>>> x=[]
>>> for i in range(5): Crea una lista de listas con nos. naturales
x.append([i])
>>> x
[[0], [1], [2], [3], [4]]
>>> a=[]
>>> for i in range(5): Crear una lista de listas vacías
a=a+[[]]
>>> a
[[], [], [], [], []]
Llenar una lista con listas de 3 componentes conteniendo números aleatorios de una cifra
Python Programación
194
Se pueden crear listas pero sin especificar aún ni los valores ni su tipo
>>> s=[]
>>> for i in range(5):
e=[i,3*i,i**2]
s=s+[e]
>>> s
[[0, 0, 0], [1, 3, 1], [2, 6, 4], [3, 9, 9], [4, 12, 16]]
>>> a=[2,5,7,6]
>>> b=[9,8,4]
>>> c=a+b Concatenación de listas
>>> c
[2, 5, 7, 6, 9, 8, 4]
>>> c=a+[b]
>>> c
[2, 5, 7, 6, [9, 8, 4]]
>>> c=[a]+[b]
>>> c
[[2, 5, 7, 6], [9, 8, 4]]
>>> d=['lunes','martes','miércoles','jueves','viernes']
>>> list(enumerate(d))
[(0, 'lunes'), (1, 'martes'), (2, 'miércoles'), (3, 'jueves'), (4, 'viernes')]
Python Programación
195
Esta instrucción es útil para iterar sobre una lista si se desea agregar el índice:
>>> d=['lunes','martes','miércoles','jueves','viernes']
0 lunes
1 martes
2 miércoles
3 jueves
4 viernes
Si se desea que la lista u tenga una copia de la lista x con celdas propias, puede crear
celdas para u y asignar los valores de x, o usar la función copy( ) como en el ejemplo
siguiente. También se puede usar la notación especial con dos puntos para obtener una
copia de la lista.
>>> x=[20,30,50]
>>> u=x.copy() La variable u tiene una copia de x en otras celdas
>>> x[1]=40 (aplicable solamente a listas de un nivel)
>>> u
[20, 30, 50]
>>> u=x[:] Esta notación especial actúa igual que u=x.copy()
Python Programación
196
>>> x=[1/3,2/5,3/7,4/3]
>>> print(x)
[0.3333333333333333, 0.4, 0.42857142857142855, 1.3333333333333333]
>>> print([float('%6.4f' % x[i]) for i in range(len(x))])
[0.3333, 0.4, 0.4286, 1.3333]
Python evalua las expresiones lógicas en modo “short circuit”. Esto significa que la
expresión lógica se evalúa únicamente hasta donde sea necesario y suficiente para
determinar el valor lógico resultante.
lista=[30,50,20,40]
for i in range(len(lista)):
if lista[i]<20 and lista[i+1]>10: #No necesita evaluar lista[4]
print(lista[i])
lista=[30,50,20,40]
for i in range(len(lista)):
if lista[i]<50 or lista[i+1]>10: #No necesita evaluar lista[4]
print(lista[i])
Python Programación