sábado, 3 de septiembre de 2011

Algunos ejercicios sobre listas

a) Definir una función que reciba un entero y retorne una lista, donde la cantidad de elementos es el número que recibe por parámetro, y el valor del elemento en cada posición es igual al índice que ocupa en la lista.

def nlista(numero):
lista=[]
for i in range(numero):
lista.append(i)
return lista
n=input("Ingrese un numero: ")
print nlista(n)

El range ya lo usé en otros ejemplos pero básicamente usa un intervalo [a,b) para especificar el rango. En este caso va de 0 a numero-1.

b) Definir una función que recibe dos parámetros desde y hasta, y retorne una lista donde los elementos vayan de desde a hasta. Resolver el ejercicio con un while y luego con un for.
def ejb_while(desde,hasta):
i=desde
l=[]
while i<=hasta:
l.append(i)
i+=1
return l
def ejb_for(desde,hasta):
l=[]
j=desde
for i in range(desde,hasta+1):
l.append(i)
return l
a=input("Ingrese un numero: ")
b=input("Ingrese otro numero: ")
print ejb_while(a,b)
print ejb_for(a,b)
c) Definir una función que recibe tres parámetros desde, entonces y hasta, y retorne una lista donde los elementos comiencen en desde, sigan con entonces a hasta. Resolver el ejercicio con un while y luego con un for. Por ejemplo, supongamos que la función se llama enumFromThenTo, los retornos de las siguientes llamadas serían:
enumFromThenTo(1, 3, 11) -> [1, 3, 5, 7, 9, 11]
enumFromThenTo(1, 4, 20) -> [1, 4, 7, 10, 13, 16, 19]
def enumFromThenTo_while(desde,entonces,hasta):
saltos=entonces-desde
l=[desde]
i=entonces
while i<=hasta:
l.append(i)
i=i+saltos
return l
def enumFromThenTo_for(desde,entonces,hasta):
l=[desde,entonces]
saltos=entonces-desde
for i in range(entonces+saltos,hasta+1,saltos):
l.append(i)
return l
print enumFromThenTo_while(1,4,20)
print enumFromThenTo_for(1,4,20)
En este caso usé el range con 3 campos, el tercero indica que avance de saltos en saltos.

d) Definir una función que construya una lista de enteros con la lista que recibe por parámetro, pero con los elementos al revés. Por ejemplo: reverse([2, 3, 5, 7, 11]) -> [11, 7, 5, 3, 2]
def reverse(lista):
laux=[]
i=len(lista)-1
j=0
while i>=0:
laux.append(lista[i])
i-=1
return laux
print reverse([2,3,5,7,11])
e) Definir una función que construya una lista de enteros con los elementos de una lista, pero solo aquellos en las posiciones pares. Por ejemplo: posicionesPares([3, 14, 16, 9, 4, 2, 716]) -> [3, 16, 4, 716]
def posicionesPares(lista):
laux=[]
i=0 #Denota la posicion del elemento en la lista
for e in lista: #e denota el elemento de la lista
if i % 2==0:
laux.append(e)
i+=1
return laux
print posicionesPares([3,14,16,9,4,2,716])
f) Definir una función que construya una lista de enteros con la lista que recibe por parámetro, pero sin incluir los elementos repetidos. Por ejemplo: sinRepetidos([2, 3, 5, 2, 11, 5]) -> [2, 3, 5, 11]
def sinRepetidos(lista):
laux=[]
for e in lista:
if e not in laux:
laux.append(e)
return laux
print sinRepetidos([2,3,5,2,11,5])
g) Definir una función que construya una lista de enteros con los elementos que las dos listas pasadas por parámetro tienen en común. Por ejemplo: intersección([2, 3, 5], [2, 11, 5]) -> [2, 5]
def interseccion_lista(lista0,lista1):
laux=[]
for e in lista0:
if e in lista1:
laux.append(e)
return laux
print interseccion_lista([2,3,5],[2,11,5])
h) Definir una función que modifique una lista pasada por parámetro, de forma que todos sus elementos tengan un valor menor o igual a max. Si el valor es mayor se le asignará a la celda el valor de max.
Por ejemplo: ceiling([3, 14, 16, 9, 4, 2, 716], 10) -> [3, 10, 10, 9, 4, 2,
10]
def ceiling(lista,maximo):
laux=[]
for e in lista:
if e>maximo:
laux.append(10)
else:
laux.append(e)
return laux
print ceiling([3,14,16,9,4,2,716],10)
i) Dada una lista X compuesta de n elementos, se desea diseñar una función que calcule la desviación estándar D dada por la fórmula:
def D(x):
suma=0
for e in x:
suma+=e
promedio=float(suma)/len(x)
bajo_raiz=0
for e in x:
bajo_raiz+=(e-promedio)**2
numerador=bajo_raiz**0.5
d=numerador/(len(x)-1)
return d
print D([1,2,3])

Para elevar un número a un exponente se usa "**", la identación es obligatoria y se me complicó subir bien el código por ser medio chambón jeje

No hay comentarios:

Publicar un comentario