Vous êtes sur la page 1sur 3

Clase 14: Listas

Problema. Escribir un programa que lea una lista de nmeros (que termina con un cero) y escriba c/u con el porcentaje que representa respecto del total. Dilogo: n?6 n?4 n?2 n?0 n % 6 50.0 4 33.3333333333 2 16.6666666667

Alternativas de solucin Variables o infactible o cuntas? o nombres? Archivo o factible, pero incmodo e ineficiente o 3 etapas (recorridos del archivo): Leer nmeros y grabarlos en un archivo Leer archivo sumando los nmeros Leer archivo calculando porcentajes o las 2 primeras etapas se pueden realizar simultneamente o propuesto

Solucin con una Lista Lista? objeto para mantener y manejar una secuencia de valores (en la memoria principal) ejemplos: [6, 4, 2] lista con 3 enteros [gabi,jose,rosa,mati] lista con 4 strings [ ] lista vaca (cero elementos) estructura del programa: leer nmeros y guardarlos en una lista sumar nmeros de la lista calcular % de cada nmero de la lista

#leer numeros y guardarlos en una lista #crear una lista para guardar nmeros L=[] #inicialmente vaca #leer numeros hasta un cero while True: numero=input("n?") if numero==0: break #agregar numero al final de la lista L.append(numero)

#sumar numeros de la lista total=0 i=0 while i < len(L): total=total+L[i] i=i+1 #calcular print "n i=0 while i < print i=i+1 % de cada numero de la lista %" len(L): L[i], 100.0*L[i]/total

Explicaciones L=[ ] crea una lista (objeto de clase list) vaca (sin elementos) alternativamente: L=list() L.append(numero) invoca mtodo append para objeto L efecto: agrega un elemento al final de la lista len(L) invoca a funcin predefinida len efecto: entrega n de elementos de lista L L[i] elemento de ndice i de lista L (se indexan/numeran desde 0) condicin: 0<=i<len(L) (sino error) elemento puede recuperarse o modificarse (ej: L[i]=0)

B. Bustos

Clase 14: Listas

Usando instruccin for y funcin range #sumar numeros de la lista total=0 for i in range( len(L) ): total=total+L[i] #calcular % de cada numero de la lista print "n %" for i in range( len(L) ): print L[i], 100.0*L[i]/total

Explicacin range(n) funcin que entrega una lista de nmeros entre 0 y n-1 ejemplo: range(3) entrega [0,1,2] forma general: range(inicial,final,incremento) o ej:range(1,10,2) entrega [1,3,5,7,9] o si se omiten: inicial=0,incremento=1 ej: range(3) y range(0,3,1) entregan [0,1,2] ej: range(1,5) entrega [1,2,3,4] o incremento<0? range(3,0,-1) entrega [3,2,1] for i in range(n) recorre todos los elementos del rango(lista) en cada iteracin, i toma el valor de un elemento del rango

Instruccin for Sintaxis for variable in lista: Semntica indice=0 while indice<len(lista): variable=lista[indice] indice += 1 #indice=indice+1 Ejemplo total=0 for numero in L: total += numero Nota similar a: for caracter in string: parecido a: for lnea in archivo:

Funciones para listas Definicin: #sumar numeros de una lista def suma(lista): s=0 for numero in lista: s += numero return s Uso: #sumar numeros de lista L total=suma(L) Nota. Como L es una referencia a un objeto de la clase list, suma(L) copia L en el parmetro lista (que tambin referencia a un objeto de la clase list)

Funciones predefinidas para listas Ejemplos: #sumar numeros de lista L total=sum(L) #menor de una lista menor=min(L) #mayor de una lista mayor=max(L) #largo de una lista n=len(L)

Programa completo: #leer numeros y guardarlos en una lista L=[] while True: numero=input("n?") if numero==0: break L.append(numero) #sumar nmeros de la lista total=sum(L) #calcular % de cada numero de la lista print "n %" for numero in L: print numero, 100.0*numero/total

B. Bustos

Clase 14: Listas

Ejercicio. Escribir un programa que lea una lista de notas y escriba las notas promedio, menor y mayor y la desviacin estndar. Indicaciones. Cada nota est grabada en una lnea del archivo notas.txt La desviacin estndar mide la dispersin de una lista de valores y se calcula como la raz cuadrada de ( (xi-p) )/n en que: n: cantidad de nmeros p: promedio de los valores xi
2

#leer notas y guardarlas en una lista L=[] for linea in open(notas.txt): L.append(float(linea)) #promedio de notas promedio=sum(L)/len(L) #calcular desviacion s=0 for nota in L: s += (nota-promedio)**2 import math desviacion=math.sqrt(s/len(L)) #mostrar resultados print promedio=, promedio print menor=, min(L) print mayor=, max(L) print desviacion=, desviacion

Operaciones predefinidas para listas


>>> L=[6,4,2] >>> L+L [6, 4, 2, 6, 4, 2] >>> L*2 [6, 4, 2, 6, 4, 2] >>> L>[2,4,6] #compara elemento a elemento True >>> 4 in L True >>> L[1:3] [4, 2]

Mtodos de la clase list que modifican la lista


L.append(x) #agrega x al final de L L.extend(L1) #extiende L con elementos de lista L1 L.insert(i,x) #inserta x en elemento de ndice i (el resto se desplaza en una posicin) L.remove(x) #elimina primer x de la lista L.pop(i) #elimina (y entrega) el elemento de ndice i L.reverse() #invierte los elementos de L L.sort() #ordena los elementos de L L.__setslice__(i,j,L1) #L[i,j]=L1 L.__iadd__(x) #L+=L1

B. Bustos

Mtodos de la clase list que devuelven un valor nmero entero


L.count(x) #n de veces que aparece x en L L.index(x) #indice de 1a aparicin de x (sino error) bool L.__lt__(L1)

#L<L1

L.__contains__(x) # x in L lista L.__add__(L1) #L+L1: nueva lista aadiendo elementos L.__mul__(n) #L*2

L.__getslice__(i,j) #L[i:j]