Cómo ordenar una lista anidada en Python

ESTO ESCRITO PARA PYTHON 2.2. PUEDE USAR LOS MISMOS CONCEPTOS EN VERSIONES MÁS TARDE, PERO LA FUNCIÓN DE CLASIFICACIÓN ES DIFERENTE. LO SENTIMOS SOBRE LA POTENCIAL CONFUSIÓN

Esto depende de cómo desee ordenar su lista anidada. Tomemos un ejemplo motivador para ordenar esta lista:

Ordenar una lista anidada en función de las sumas de la lista: [[3, 6,1], [1, 5,9], [1, 8,9], [1, 6,8]]

Para crear una forma personalizada de ordenar nuestra lista anidada, tenemos que usar una estructura conocida como comparador. Este comparador toma dos de los objetos que estamos ordenando, en nuestro caso simplemente son listas de enteros, y calcula cómo ordenarlos. ¡Entremos en el código!

Este primer fragmento cubre la inicialización de nuestra matriz y el inicio del comparador.

# creando la matriz que vamos a ordenar
arr = [[3,6,1], [1,5,9], [1,8,9], [1,6,8]]

# ahora tenemos que crear la función de clasificación
comparador def (x, y):
# xey son ambas listas de enteros

x_sum = 0 # nuestra variable que contiene la suma de la lista x
y_sum = 0 # nuestra variable que contiene la suma de la lista y

# recorriendo cada valor de x y agregándolo a nuestra suma
para xVal en x:
x_sum = x_sum + xVal
# recorriendo cada valor de y y agregándolo a nuestra suma
para yVal en y:
y_sum = y_sum + yVal

# con nuestras sumas calculadas, es hora de entrar en más
# explicaciones!

En Python, una función de comparación devuelve un valor booleano. Sin explicación, este booleano puede ser difícil de interpretar. ¡Por lo tanto, he elegido repasarlo a continuación!

Cuando un comparador devuelve “1”, significa que el primer parámetro es más grande que el segundo. Por ejemplo, en un comparador de clasificación de enteros básico, cuando el comparador recibe x = 4 e y = 3, devolverá “1” ya que x es mayor o igual que y. Si se devuelve “-1”, significa que y es mayor que x. En nuestro caso, queremos que la lista con la suma más baja se coloque primero, por lo que si x tiene una suma más baja, devolveremos -1, pero si y tiene una suma más baja, a su vez devolveremos 1. Volvamos a ¡el código! (He copiado el último fragmento, ¡así que el siguiente fragmento de código es el programa completo!)

# creando la matriz que vamos a ordenar
arr = [[3,6,1], [1,5,9], [1,8,9], [1,6,8]]

# ahora tenemos que crear la función de clasificación
comparador def (x, y):
# xey son ambas listas de enteros

x_sum = 0 # nuestra variable que contiene la suma de la lista x
y_sum = 0 # nuestra variable que contiene la suma de la lista y

# recorriendo cada valor de x y agregándolo a nuestra suma
para xVal en x:
x_sum = x_sum + xVal
# recorriendo cada valor de y y agregándolo a nuestra suma
para yVal en y:
y_sum = y_sum + yVal

if x_sum <y_sum: # si la suma de x es menor que la suma de y
volver -1; # le dice a la función de clasificación que coloque x antes de y
de lo contrario: # si la suma de y es menor o igual que x
retorno 1; # le dice a la función de clasificación que tenga y antes de x

# nuestro comparador está completo y ahora tenemos que usarlo.
arr.sort (comparador)
imprimir arr