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