Python
Ordenamiento
sorted(lista)
Es la forma más sencilla de ordenar. No cambia la lista original
a = [5, 1, 4, 3]
print sorted(a) ## [1, 3, 4, 5]
print a ## [5, 1, 4, 3]
Acepta argumentos opcionales:
reverse=True hace el ordenamiento a la inversa
strs = ['aa', 'BB', 'zz', 'CC']
print sorted(strs) ## ['BB', 'CC', 'aa', 'zz'] (sensible a las mayúsculas)
print sorted(strs, reverse=True) ## ['zz', 'aa', 'CC', 'BB']
Personalizando con key=
- key= especifica una función "clave" que transforma cada elemento antes de la comparación
- La función toma 1 argumento y retorna 1 valor, y el valor retornado "intermediario" es el que se utiliza para la comparación en el ordenado.
Personalizando con key=
Por ejemplo usando key=len ordena las cadenas por longitud
strs = ['ccc', 'aaaa', 'd', 'bb']
print sorted(strs, key=len) ## ['d', 'bb', 'ccc', 'aaaa']
Personalizando con key=
## argumento "key" especificando la función str.lower para ser
## usado en el ordenamiento
print sorted(strs, key=str.lower) ## ['aa', 'BB', 'CC', 'zz']
Otro ejemplo
Creando funciones personalizadas
## Tenemos una lista de cadenas que queremos ordenar por la última letra.
strs = ['xc', 'zb', 'yd' ,'wa']
## Escribimos una función que recibe una cadena, y retorna su última letra.
## Esta será la función key (toma 1 argumento, retorna 1 valor).
def MiFn(s):
return s[-1]
## Ahora pasamos key=MiFn a sorted() para ordenar por la última letra:
print sorted(strs, key=MiFn) ## ['wa', 'zb', 'xc', 'yd']
Recordar recibir sólo 1 argumento y retornar 1 valor
Tuplas
- Es un agrupamiento de elementos de tamaño fijo
- Son como listas, pero inmutable y no cambian tamaño. (un elemento puede ser mutable).
- Las funciones pueden retornar múltiples valores utilizando tuplas
- Para crear una tupla, colocar sus valores entre paréntesis separados por comas: (x, y, z)
-
Los elementos se acceden exactamente igual a como en las listas: len(), [], for, in, etc funcionan igual.
tuple = (1, 2, 'hola')
print len(tuple) ## 3
print tuple[2] ## hola
tuple[2] = 'chau' ## NO, las tuplas no se pueden cambiar
tuple = (1, 2, 'chau') ## ésto funciona
Tuplas
Para asignar 1 solo elemento a una tupla, ese elemento debe estar seguido de una coma
tupla = ('hola',) ## tupla de tamaño 1
Asignar una tupla a otra tupla de variables de tamaño idéntico asigna todos los valores correspondientes. Esto también funciona en listas
(x, y, z) = (42, 13, "caminata")
print z ## caminata
(err_string, err_code) = Foo() ## Foo() retorna una tupla de longitud 2
Listas por comprensión (opcional)
Son una forma compacta de escribir una expresión que se expande a una lista completa.
Por ejemplo tenemos una lista [1,2,3,4], aquí hay una comprensión que se expande a sus cuadrados:
nums = [1, 2, 3, 4]
cuadrados = [ n * n for n in nums ] ## [1, 4, 9, 16]
Listas por comprensión
[ expresion for variable in lista ]
for variable in lista es un bucle for estándar, sólo que sin los dos puntos (:)
La expresión es evaluada una vez por cada elemento para agregar valores a la nueva lista
strs = ['hola', 'y', 'adios']
gritando = [ s.upper() + '!!!' for s in strs ]
## ['HOLA!!!', 'Y!!!', 'ADIOS!!!']
Listas por comprensión
Se puede agregar un if a la derecha para reducir el resultado. El if es evaluado por cada elemento, incluyendo sólo los elementos que devuelven True
## Seleccionar valores <= 2
nums = [2, 8, 1, 6]
small = [ n for n in nums if n <= 2 ] ## [2, 1]
## Seleccionar frutas que contienen una 'a', cambiar a mayusculas
fruits = ['manzana', 'kiwi', 'banana', 'limon']
afruits = [ s.upper() for s in fruits if 'a' in s ]
## ['MANZANA', 'BANANA']
Material extra de lectura
Python - Ordenamiento
By Guillermo Nuñez
Python - Ordenamiento
- 2,228