Está en la página 1de 35

AINS 1001 - Programación I

Ingeniería en Computación e Informática


Unidad 5: Estructuras de Datos Simples

Universidad Andrés Bello


Facultad de Ingeniería

AINS 1001 - Programación I 1/35


Listas

Una lista es una colección ordenada de valores.


En Python, el tipo de datos que representa a las listas se llama list.
¿Cómo crear listas?
lista literal, con los valores entre corchetes

>>> primos = [2 ,3 ,5 ,7 ,11]


>>> primos
[2 , 3 , 5 , 7 , 11]

usar la función list

>>> list ( ’ hola ’)


[ ’h ’ , ’o ’ , ’l ’ , ’a ’]

AINS 1001 - Programación I 2/35


Listas
Agregar

append(x): agrega el elemento x al final de la lista.

>>> valores = []
>>> valores . append (5)
>>> valores . append (1)
>>> valores . append (6)
>>> valores
[5 , 1 , 6]
>>> valores . append ( -4)
>>> valores
[5 , 1 , 6 , -4]
>>> valores . append (23)
>>> valores
[5 , 1 , 6 , -4 , 23]

AINS 1001 - Programación I 3/35


Listas
Índices

index(x): retorna el indice del primer elemento que tiene valor x en la


lista.

>>> colores = [ ’ azul ’ , ’ rojo ’ , ’ verde ’ , ’ gris ’]


>>> colores [2]
’ verde ’
>>> colores [1:3]
[ ’ rojo ’ , ’ verde ’]
>>> colores [ -1]
’ gris ’
>>> colores . index ( ’ rojo ’)
1
>>> len ( colores )
4

AINS 1001 - Programación I 4/35


Listas
Insertar y Eliminar

insert(i,x): inserta el elemento x en la posición i de la lista.

>>> colores = [ ’ azul ’ , ’ rojo ’ , ’ verde ’ , ’ gris ’]


>>> colores . insert (2 , ’ blanco ’)
>>> colores
[ ’ azul ’ , ’ rojo ’ , ’ blanco ’ , ’ verde ’ , ’ gris ’]

del a[i]: elimina el elemento de la posición i de la lista a.

>>> colores = [ ’ azul ’ , ’ rojo ’ , ’ verde ’ , ’ gris ’]


>>> del colores [1]
>>> colores
>>> colores = [ ’ azul ’ , ’ verde ’ , ’ gris ’]

# elimina la lista completa


>>> del colores

AINS 1001 - Programación I 5/35


Listas
Operaciones

>>> x = [6 , 1 , 4 , 7 , 8]

# Largo de la lista .
>>> len ( x )
5

# Sumar todos los elementos de la lista .


>>> sum ( x )
26

# Ordenar la lista de forma ascendente .


>>> x . sort ()
>>> x
[1 , 4 , 6 , 7 , 8]

# Dejar la lista en orden reverso .


>>> x . reverse ()
>>> x
[8 , 7 , 6 , 4 , 1]

# Comprobar que un elemento pertenece a la lista .


>>> 7 in x
True

AINS 1001 - Programación I 6/35


Listas
range

Un rango es una sucesión de números enteros equiespaciados. Hay


tres formas de definir un rango:
range ( final )
range ( inicial , final )
range ( inicial , final , incremento )

El valor inicial siempre es parte del rango.


El valor final nunca es incluido en el rango.
El incremento indica la diferencia entre dos valores consecutivos del
rango.
Si el valor incial es omitido, se asume valor 0.
Si el valor incremento es omitido, se asume valor 1.

AINS 1001 - Programación I 7/35


Listas
range

>>> range (9)


[0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8]

>>> range (3 ,13)


[3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12]

>>> range (3 ,13 ,2)


[3 , 5 , 7 , 9 , 11]

>>> range (11 ,4)


[]

>>> range (11 ,4 , -1)


[11 , 10 , 9 , 8 , 7 , 6 , 5]

AINS 1001 - Programación I 8/35


Listas

ramos = [ ’ Progra ’ , ’ Mate ’ , ’ Ingles ’]


for ramo in ramos :
print ’ Tengo clases de ’ , ramo

Tengo clases de Progra


Tengo clases de Mate
Tengo clases de Ingles

ramos = [ ’ Progra ’ , ’ Mate ’ , ’ Ingles ’]


horas = [ ’ 10:00 ’ , ’ 14:00 ’ , ’ 18:00 ’]
for i in range ( len ( ramos ) ) :
print ’ Tengo ’ , ramos [ i ] , ’a las ’ , horas [ i ]

Tengo Progra a las 10:00


Tengo Mate a las 14:00
Tengo Ingles a las 18:00

AINS 1001 - Programación I 9/35


Listas
Copiado de listas

>>> a = [5 , 1 , 4]
>>> b = a

>>> b [0] = 1000


>>> a
[1000 , 1 , 4]

# es necesario utilizar la sentencia list ()


>>> a = [5 , 1 , 4]
>>> b = list ( a )

>>> b [0] = 1000


>>> a
[5 , 1 , 4]

AINS 1001 - Programación I 10/35


Listas
Desviación Estándar

Ejemplo 1
Escribir un programa que pregunte cuántos datos se ingresará, pida los
datos, y entregue la desviación estándar:

Cuantos datos ? 5
Dato 1: 2.4
Dato 2: 7.1
Dato 3: 3.8
Dato 4: 3.3
Dato 5: 4.9
La desviacion estandar es 1.80693109996

AINS 1001 - Programación I 11/35


Listas

n = int ( raw_input ( ’ Cuantos datos ? ’) )


datos = []
for i in range (1 , n + 1) :
x = float ( raw_input ( ’ Dato ’ + str ( i ) + ’: ’) )
datos . append ( x )

suma = 0.0
for x in datos :
suma = suma + x
promedio = suma / n

suma_dif_cuad = 0.0
for x in datos :
suma_dif_cuad = suma_dif_cuad + ( x - promedio ) ** 2

desviacion = ( suma_dif_cuad / ( n - 1) ) ** 0.5

print ’ La desviacion estandar es ’ , desviacion

AINS 1001 - Programación I 12/35


Tuplas
Una tupla es una secuencia de valores agrupados.
Una tupla sirve para agrupar, como si fueran un único valor, varios
valores que, por su naturaleza, deben ir juntos.
En Python, el tipo de datos que representa a las tuplas se llama tuple.
El tipo tuple es inmutable: no puede ser modificada una vez que ha
sido creada.
Una tupla es creada colocando los valores separados por comas y entre
paréntesis.

alumno = ( ’ Fulano ’ , ’ De Tal ’ , ’ 15087345 -1 ’)

carta = (5 , ’ corazones ’)

fecha = (2011 , 4 , 12)

triangulo = ((5 , 1) , (2 , 4) , ( -2 , 0) )

persona = ( ’ Arturo Prat ’ , (1848 , 4 , 3) , (1879 , 5 , 21) )

AINS 1001 - Programación I 13/35


Tuplas
Desempaquetar

>>> punto = (6.6 , -2.4 , 3.7)


>>> x , y , z = punto
>>> print x
6.6

# usando los indices , al igual que en las listas


>>> punto [2]
>>> 3.7

>>> per = ( ’ Arturo Prat ’ , (1848 , 4 , 3) , (1879 , 5 , 21) )


>>> nombre , nacimiento , defuncion = per
>>> an , mn , dn = nacimiento
>>> ad , md , dd = defuncion
>>> ad - an
31

AINS 1001 - Programación I 14/35


Tuplas
Comparación

Dos tuplas son iguales cuando tienen el mismo tamaño y cada uno de sus elementos
correspondientes tienen el mismo valor:

>>> (1 , 2) == (3 / 2 , 1 + 1)
True
>>> (6 , 1) == (6 , 2)
False

Orden lexicográfico: si los elementos en la primera posición de ambas tuplas son distintos,
ellos determinan el ordenamiento de las tuplas.

>>> (1 , 4 , 7) < (2 , 3 , 0 , 1)
True
>>> (1 , 9 , 10) < (0 , 5)
False

Si a una tupla se le acaban los elementos para comparar antes que a la otra, entonces es
considerada menor que la otra.

>>> (4 , 5 , 7 , 8) < (4 , 5 , 7)
False
>>> (1 , 2) < (1 , 2 , 4)
True

AINS 1001 - Programación I 15/35


Tuplas
Lista de tuplas

regiones = [
( ’ XV ’ , ’ Arica y Parinacota ’ ,213816) ,
( ’I ’ , ’ Tarapaca ’ ,300021) ,
( ’ II ’ , ’ Antofagasta ’ ,547463) ,
# ...
( ’ XII ’ , ’ Magallanes ’ ,159468)
]

for region in regiones :


num , nom , hab = region
print ’ La region de ’ , nom , ’ tiene ’ , hab , ’ habs . ’

for num , nom , hab in regiones :


print ’ La region de ’ , nom , ’ tiene ’ , hab , ’ habs . ’

AINS 1001 - Programación I 16/35


Tuplas

Ejercicio 1
Escriba la función distancia(p1, p2) que retorne la distancia entre los
puntos p1 y p2:

>>> a = (5.1 , 7.3 , 2.4)


>>> b = (1.1 , 2.8 , 4.9)
>>> distancia (a , b )
6. 5192 024 05 20 264 92

AINS 1001 - Programación I 17/35


Tuplas

Ejercicio 2
Un polígono está determinado por la lista de sus vértices. Escriba la
función perimetro(vertices) que entregue el perímetro del polígono
definido por la lista vertices:

>>> p = [(4 , 1) , (7 , 2) , (7 , 4) , (5 , 9) ]
>>> perimetro ( p )
18 .609 700 21 56 014 32

AINS 1001 - Programación I 18/35


Diccionarios

Un diccionario es un tipo de dato que sirve para asociar pares de


objetos.
Un diccionario puede ser visto como una colección de llaves, cada
una de las cuales tiene asociada un valor.
Las llaves no están ordenadas y no hay llaves repetidas.
La única manera de acceder a un valor es a través de su llave.
En Python, el tipo de datos que representa a los diccionarios se llama
dict.

AINS 1001 - Programación I 19/35


Diccionarios

Los diccionarios se crean usando paréntesis de llave ({ y }). La llave


y el valor van separados por dos puntos.
>>> telefonos = {
... ’ Pepito ’: 5552437 ,
... ’ Jaimito ’: 5551428 ,
... ’ Yayita ’: 5550012 ,
... }

Un diccionario vacío puede ser creado usando {} o con la función


dict()
>>> d = {}
>>> d = dict ()

AINS 1001 - Programación I 20/35


Diccionarios

>>> telefonos = { ’ Pepito ’: 5552437 , ’ Jaimito ’: 5551428 ,


’ Yayita ’: 5550012}

El valor asociado a la llave k en el diccionario d se puede obtener


mediante d[k]:
>>> telefonos [ ’ Pepito ’]
5552437
>>> telefonos [ ’ Jaimito ’]
5551428

Si la llave no está presente en el diccionario, ocurre un error de llave


>>> telefonos [ ’ Fulanito ’]
Traceback ( most recent call last ) :
File " < stdin > " , line 1 , in < module >
KeyError : ’ Fulanito ’

AINS 1001 - Programación I 21/35


Diccionarios

>>> telefonos = { ’ Pepito ’: 5552437 , ’ Jaimito ’: 5551428 ,


’ Yayita ’: 5550012}

Se puede agregar una llave nueva simplemente asignándole un valor:


>>> telefonos [ ’ Susanita ’] = 4448139
>>> telefonos
{ ’ Pepito ’: 5552437 , ’ Susanita ’: 4448139 ,
’ Jaimito ’: 5551428 , ’ Yayita ’: 5550012}

Si se asigna un valor a una llave que ya estaba en el diccionario, el


valor anterior se sobreescribe
>>> telefonos [ ’ Jaimito ’] = 4448139
>>> telefonos
{ ’ Pepito ’: 5552437 , ’ Susanita ’: 4448139 ,
’ Jaimito ’: 4448139 , ’ Yayita ’: 5550012}

AINS 1001 - Programación I 22/35


Diccionarios
Operaciones

>>> patas = { ’ humano ’: 2 , ’ pulpo ’: 8 , ’ perro ’:4 ,


’ gato ’:4 , ’ ciempies ’ :100}
# lista de las llaves .
>>> list ( patas )
[ ’ humano ’ , ’ pulpo ’ , ’ gato ’ , ’ perro ’ , ’ ciempies ’]

# lista de los valores .


>>> list ( patas . values () )
[2 , 8 , 4 , 4 , 100]

# pertenencia
>>> ’ perro ’ in patas
True
>>> 8 in patas
False

# cantidad de pares llave : valor .


>>> len ( patas )
5
AINS 1001 - Programación I 23/35
Diccionarios
Contar letras

Ejemplo 2
Escriba una función contarLetras(palabra) que reciba un string y
retorne un diccionario que indique cuántas veces aparece cada letra en el
string:

print contarLetras ( ’ entretener ’)


{ ’e ’: 4 , ’n ’: 2 , ’r ’: 2 , ’t ’: 2}

print contarLetras ( ’ lapiz ’)


{ ’a ’: 1 , ’i ’: 1 , ’l ’: 1 , ’p ’: 1 , ’z ’: 1}

AINS 1001 - Programación I 24/35


Diccionarios
Contar letras

def contarLetras ( palabra ) :


cuentas = {}
for letra in palabra :
if letra not in cuentas :
cuentas [ letra ] = 0
cuentas [ letra ] = cuentas [ letra ] + 1
return cuentas

AINS 1001 - Programación I 25/35


Diccionarios
Recorrer diccionarios

capitales = {
’ Chile ’: ’ Santiago ’ ,
’ Peru ’: ’ Lima ’ ,
’ Ecuador ’: ’ Quito ’ ,
}

for pais in capitales :


print ’ La capital de ’ , pais , ’ es ’ , capitales [ pais ]

for capital in capitales . values () :


print capital , ’ es una linda ciudad ’

for p , c in capitales . items () :


print c , ’ es la capital de ’ , p

AINS 1001 - Programación I 26/35


Estructuras anidadas

Ejercicio 3
Los datos de los alumnos de una universidad están almacenados en un
diccionario. La llave es el rut, y el valor es una tupla con el nombre, el
apellido y la fecha de nacimiento:

alumnos = {
’ 17727943 -9 ’ :( ’ Esteban ’ , ’ Aguila ’ ,(1990 ,10 ,5) ) ,
’ 18390789 -1 ’ :( ’ Monica ’ , ’ Barrios ’ ,(1989 ,11 ,27) ) ,
’ 17998602 -7 ’ :( ’ Victor ’ , ’ Delgado ’ ,(1990 ,3 ,18) ) ,
’ 18169557 -9 ’ :( ’ Felipe ’ , ’ Galdames ’ ,(1991 ,2 ,12) ) ,
’ 18544577 -1 ’ :( ’ Romina ’ , ’ Munoz ’ ,(1992 ,5 ,25) ) ,
’ 17671355 -0 ’ :( ’ Jean ’ , ’ Pineda ’ ,(1990 ,8 ,23) ) ,
’ 17810027 -0 ’ :( ’ Cinthia ’ , ’ Sotelo ’ ,(1990 ,10 ,9) ) ,
’ 17958914 -1 ’ :( ’ Amparo ’ , ’ Zambrano ’ ,(1991 ,11 ,22) ) ,
}

AINS 1001 - Programación I 27/35


Estructuras anidadas

Ejercicio 3 (cont.)
Los inscritos de cada ramo están registrados en otro diccionario. Las
llaves son los nombres de los ramos, y cada valor es una lista de los rut’s
de los alumnos que están cursando el ramo:

inscritos = {
’ Progra ’: [ ’ 18390789 -1 ’ , ’ 17958914 -1 ’ , ’ 18169557 -9 ’ , ’ 17671355 -0 ’] ,
’ Mate ’: [ ’ 17727943 -9 ’ , ’ 17958914 -1 ’ , ’ 18169557 -9 ’ , ’ 17810027 -0 ’] ,
’ Quimica ’: [ ’ 17727943 -9 ’ , ’ 17958914 -1 ’ , ’ 18544577 -1 ’ , ’ 17671355 -0 ’ ,
’ 17810027 -0 ’ , ’ 18390789 -1 ’] ,
’ Ingles ’: [ ’ 18390789 -1 ’ , ’ 17958914 -1 ’ , ’ 17958914 -1 ’ , ’ 17810027 -0 ’]
}

AINS 1001 - Programación I 28/35


Estructuras anidadas

Ejercicio 3 (cont.)
Escriba la función ramosAlumno(rut) que retorne la lista de los ramos
que está cursando el alumno con el rut entregado como parámetro:

print ramosAlumno ( ’ 18390789 -1 ’)


[ ’ Progra ’ , ’ Quimica ’ , ’ Ingles ’]

print ramosAlumno ( ’ 17727943 -9 ’)


[ ’ Mate ’ , ’ Quimica ’]

AINS 1001 - Programación I 29/35


Estructuras anidadas

Ejercicio 3 (cont.)
Escriba la función alumnoMasJoven() que retorne el nombre del alumno
más joven:

print alumnoMasJoven ()
’ Romina Munoz ’

AINS 1001 - Programación I 30/35


Estructuras anidadas

Ejercicio 4
La aerolínea Py-LAN tiene vuelos a casi todas las partes del mundo. La
información de cada vuelo se encuentra almacenada en el diccionario
vuelos, cuya llave es el código de vuelo y el valor correspondiente es una
tupla con el destino, fecha y la distancia a recorrer (en kilómetros).
También se cuenta con los vuelos por realizar de cada pasajero
almacenado en el diccionario itinerario cuya llave es el nombre del
pasajero y su valor un conjunto con los vuelos a realizar.
Escriba las siguientes funciones:

AINS 1001 - Programación I 31/35


Estructuras anidadas

Ejercicio 4 (cont.)
Considere las siguientes estructuras como ejemplo:

vuelos = {
# codigo : destino , fecha ( anio , mes , dia ) , distancia ( km )
140: ( ’ Cancun ’ , (2013 , 6 , 28) , 6751) ,
141: ( ’ Rio de Janeiro ’ , (2013 , 6 , 13) , 2772) ,
142: ( ’ New York ’ , (2013 , 9 , 12) , 7546) ,
143: ( ’ Tokio ’ , (2013 , 8 , 17) , 14248) ,
144: ( ’ New York ’ , (2014 , 1 , 1) , 3792) ,
145: ( ’ Rio de Janeiro ’ , (2013 , 12 , 20) , 2819) ,
146: ( ’ Punta Cana ’ , (2013 , 8 , 18) , 5444)
}

itinerario = {
# pasajero , vuelos por realizar
" Daniel " : [140 ,146] ,
" Juan " : [144 ,140] ,
" Rodrigo " : [142 ,144 ,141] ,
" Pedro " : [145 ,146]
}

AINS 1001 - Programación I 32/35


Estructuras anidadas

Ejercicio 4 (cont.)
La función vueloMasTardio(vuelos) que reciba el diccionario vuelos
y determine cuál es el vuelo más tardío (alejado en el tiempo),
retornando su código.

print vueloMasTardio ( vuelos )


144

AINS 1001 - Programación I 33/35


Estructuras anidadas

Ejercicio 4 (cont.)
La función kmsPorVolar(pasajero,itinerario,vuelos) que a partir
del nombre de un pasajero y los diccionarios itinerario y vuelos,
retorne una lista con los kilómetros por volar.

print kmsPorVolar ( " Rodrigo " , itinerario , vuelos )


[7546 , 3792 , 2772]

AINS 1001 - Programación I 34/35


Estructuras anidadas

Ejercicio 4 (cont.)
La empresa ha decidido premiar a aquellos pasajeros que compraron el
vuelo más tardío con un monto equivalente a la cantidad de kilómetros
por volar. Para ello, escriba la función premio(itinerario,vuelos)
que reciba los diccionarios itinerario y vuelos y retorne un
diccionario con el nombre y monto del premio de cada pasajero.

print premio ( itinerario , vuelos )


{ ’ Rodrigo ’: 14110 , ’ Juan ’: 10543}

AINS 1001 - Programación I 35/35

También podría gustarte