es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?))

Tags:  , , ,

Answer

  1. Avatar for 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 personalizada compare que se usará como parámetro key en el método sort(). A continuación, se muestra el código:

    lst = [[7, 0], [4, 4], [7, 1], [5, 0], [6, 1], [5, 2]]
    
    # función compare que se usará como key en sort()
    def compare(item):
        return (-item[0], item[1])
    
    lst.sort(key=compare)
    print(lst)
    

    Salida:

    [[7, 0], [7, 1], [6, 1], [5, 0], [5, 2], [4, 4]]
    

    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ámetro key al método sort() en la lista lst. Se imprime la lista actualizada lst.

    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étodo sort().

Comments are closed.