Documentos de Académico
Documentos de Profesional
Documentos de Cultura
estructura.mutable("registro","nombre fono")
agenda=[registro("a",2),registro("c",1),registro("d",4)]
def buscar(nombre,agenda):
for reg in agenda:
if reg.nombre==nombre: return reg.fono
return None
assert buscar("c",agenda)==1
Solución recursiva
estructura.mutable("registro","nombre fono")
agenda=[registro("a",2),registro("c",1),registro("d",4)]
def buscar(nombre,agenda,i=0):
if i>=len(agenda): return None
reg=agenda[i]
if reg.nombre==nombre: return reg.fono
return buscar(nombre,agenda,i+1)
assert buscar("c",agenda)==1
Algoritmos de búsqueda
• Búsqueda secuencial (o lineal)
– iterativa (con inst for) o recursiva
– ¿n° de comparaciones? O(n) “del orden de n”
– ej: ~512 comparaciones para lista de n=1024
– Si lista ordenada, se puede optimizar
• Búsqueda binaria
– solo para lista ordenada
– divide sucesivamente la lista en dos mitades
– recursiva o iterativa (con instrucción while)
– ¿n° de comparaciones? O(log2n) “del orden de log2n”
– ej: ~10 comparaciones para lista de n=1024
Algoritmo de Búsqueda binaria
def buscar(nombre,agenda):
ip=0; iu=len(agenda)-1
while ip<=iu:
im=(ip+iu)/2
c=cmp(agenda[im].nombre, nombre)
if c==0: return agenda[im].fono
if c>0:
iu=im-1
else:
ip=im+1
return None #no esta
Instrucción while
Sintaxis
while condición:
instrucciones
Semántica
Mientras condición se cumpla (sea True) ejecutar instrucción(es)
graficamente:
False
condición
True
instrucciones
Instrucción for
Sintaxis
for variable in lista: …
Semántica
indice=0
while indice<len(lista):
variable=lista[indice]
…
indice += 1 #indice=indice+1
Ejemplo
total=0 total=0
for numero in L: indice=0
total += numero while indice<len(L):
numero=L[indice]
total += numero
indice += 1
String (estructura indexada inmutable)
s=”casa”; S=”CASA” #asignación
a=s+S #”casaCasa” concatenación
len(s) #4 largo (nº de caracteres) de s
s<S #False comparacion
s[1:3] #”as” substring entre índices 1 y 2 (3-1)
‘a’ in s #True porque string “a” está en string “casa”
for c in s: print c #muestra c, a, s y a
def inverso(x):
s=””
for c in x: s=c+s
return s
assert inverso(“roma”)==”amor”
def fraseCapicua(frase):
frase=frase.replace(“ “,””) #eliminar espacios
frase=frase.lower() #todo a minusculas
return capicua(frase)
assert fraseCapicua(“Anita lava la tina”)
Lista de listas (lista de 2 dimensiones, tabla, matriz)
ejemplo
T=[[“gabriela”,”jose”,”rosa”,”matias”], \ #fila 0
[62,48,56,49], \ #fila 1: lista de notas preg 1
[45,52,35,48] \ #fila 2: lista de notas preg 2
]
¿Construcción de una tabla?
#tabla inicialmente vacia
T=[]
#construir todas las filas
filas=n°; columnas=n°
for i in range(filas):
#agregar fila i inicialmente vacia
T.append([])
#agregar valores a fila i
for j in range(columnas):
… #obtener valor
T[i].append(valor) #al final de fila i
T=[["gabriela","jose","rosa","matias"],\
[62,48,56,49],\
[45,52,35,48]]