IWI131 Programación


Resolución de Problemas con Listas



Departamento de Informática
Universidad Técnica Federico Santa María

WARNING: Copiado de listas

Es necesario tener precaución cuando se intenta copiar una lista.

In [1]:
a = list("514")
b = a
b[0] = 1000
print("a=",a)
print("b=",b)
a= [1000, '1', '4']
b= [1000, '1', '4']

¿Cómo solucionar el problema anterior?

In [2]:
a = list("514")
b = list(a)
b[0] = 1000
print("a=",a)
print("b=",b)
a= ['5', '1', '4']
b= [1000, '1', '4']

WARNING: Copiado de listas

Esto también afecta a las funciones.

In [3]:
def funcion_malvada(lista):
    lista.append(10)
    return sum(lista)
In [4]:
L=[1,2,3,4]
print(L)
print(funcion_malvada(L))
print(L)
[1, 2, 3, 4]
20
[1, 2, 3, 4, 10]

¿Cómo solucionar el problema anterior?

In [5]:
L=[1,2,3,4]
print(L)
print(funcion_malvada(list(L)))
print(L)
[1, 2, 3, 4]
20
[1, 2, 3, 4]

La función list(L) crea una copia de una la lista L, así no se modifica la original.

Manejo de listas relacionadas

Una asignatura universitaria almacena la lista del curso y sus notas en listas. Todas estas están relacionadas por sus índice.

In [6]:
curso=['Simón','Sebastian','Rodrigo','Angélica','Pablo','Francisca']
c1=[90,60,80,100,75,70]
c2=[80,70,70,75,90,100]
c3=[65,100,90,90,100,80]

Cree un programa que genere e imprima el promedio de cada alumno. Además, muestre el promedio de todo el curso.

In [7]:
promedios=[]


for indice in list(range(len(curso))):
    prom=[c1[indice], c2[indice], c3[indice]]
    promedios.append(round(sum(prom)/len(prom)))
    print("El promedio de",curso[indice],"es",promedios[indice])

print("El promedio del curso es", round(sum(promedios)/len(promedios)))
El promedio de Simón es 78
El promedio de Sebastian es 77
El promedio de Rodrigo es 80
El promedio de Angélica es 88
El promedio de Pablo es 88
El promedio de Francisca es 83
El promedio del curso es 82

Realice una función que reciba las listas curso y promedios como parámetros y determine el alumno con mayor promedio del curso.

In [8]:
def mejor(curso, promedios):
    mayor=-1
    
    for indice in list(range(len(curso))):
        if promedios[indice] > mayor: #que pasa si >=?
            mayor=promedios[indice]
            mejor=curso[indice]
    
    return mejor
In [9]:
print(mejor(curso,promedios))
Angélica

Uso de funciones aleatorias para Listas

La librería random incluye funciones para selección aleatoria desde listas. Echemos un vistazo a la función choice.

El Loto es un juego de azar en donde se seleccionan aleatoriamente 6 números, sin repetirse, de una tombola con valores entre el 1 y el 41. Desarrolle un programa que simule un sorteo.

Sin Listas

In [12]:
from random import randint

n1=randint(1,41)

n2=randint(1,41)
while n2==n1:
    n2=randint(1,41)
    
n3=randint(1,41)
while n3==n1 or n3==n2:
    n3=randint(1,41)

n4=randint(1,41)
while n4==n1 or n4==n2 or n4==n3:
    n4=randint(1,41)

n5=randint(1,41)
while n5==n1 or n5==n2 or n5==n3 or n5==n4:
    n5=randint(1,41)

n6=randint(1,41)
while n6==n1 or n6==n2 or n6==n3 or n6==n4 or n6==n5:
    n6=randint(1,41)
    
print("Los numeros sorteados son:",n1,n2,n3,n4,n5,n6)
Los numeros sorteados son: 8 16 33 9 31 21

Con Listas

In [13]:
from random import choice

sorteo=[]
tombola=list(range(1,41))

while len(sorteo)<6:
    x=choice(tombola)
    sorteo.append(x)
    tombola.remove(x)

print("Los numeros sorteados son:", sorteo)
Los numeros sorteados son: [28, 35, 10, 17, 18, 5]
In [ ]: