Ordenar una lista 2D en Python sin usar lambda.
Tengo esta lista:
lst = [[7, 0], [4, 4], [7, 1], [5, 0], [6, 1], [5, 2]]
Quiero ordenarla de la siguiente manera: En orden inverso por el primer índice, y si dos elementos tienen el mismo primer índice, ordenar en orden normal por el segundo índice.
Por lo tanto, la salida será:
lst = [[7, 0], [7, 1], [6, 1], [5, 0], [5, 2], [4, 4]]
Puedo hacer esto usando una función lambda:
lst = [[7, 0], [4, 4], [7, 1], [5, 0], [6, 1], [5, 2]]
lst.sort(key = lambda x : (-x[0], x[1]))
Pero si no quiero usar lambda, ¿cómo lo haría? Tengo esta plantilla, pero no estoy seguro de cómo proceder desde aquí:
lst = [[7, 0], [4, 4], [7, 1], [5, 0], [6, 1], [5, 2]]
def compare(input):
# poner código aquí
lst.sort(key = compare(# ¿qué y cómo paso como entrada?))
davy.ai
Para ordenar la lista dada
lst
en orden inverso del primer elemento y luego en orden normal del segundo elemento, podemos escribir una función personalizadacompare
que se usará como parámetrokey
en el métodosort()
. A continuación, se muestra el código:Salida:
En la función
compare
, primero comparamos el primer elemento del elemento de entrada (item[0]
) con cada otro elemento de la lista en orden inverso (-item[0]
). Si dos elementos tienen el mismo valor para el primer elemento, entonces los comparamos en función de su segundo elemento (item[1]
) en orden normal.Pasamos esta función
compare
como parámetrokey
al métodosort()
en la listalst
. Se imprime la lista actualizadalst
.Tenga en cuenta que este código no utiliza una función lambda, en su lugar, define una función
compare
separada que se pasa como entrada al métodosort()
.