Dada una lista de la lista de int, str, necesito encontrar una manera de ordenar esto de mayor a menor, sin usar ordenado. Así que si tengo:
list = [[1, 'orange'], [3, 'banana'], [2, 'pear'], [1, 'apple']]
Debería haber devuelto esto ordenado por número, y si los números son iguales, por orden alfabético como:
[[3, 'banana'], [2, 'pear'], [1, 'apple'], [1, 'orange']]
¿Hay alguna manera de hacer esto sin usar la función ordenada?
Bueno, podrías usar el método sort()
:
lst = [[1, 'orange'], [3, 'banana'], [2, 'pear'], [1, 'apple']] lst.sort(key=lambda x: (-x[0], x[1])) lst => [[3, 'banana'], [2, 'pear'], [1, 'apple'], [1, 'orange']]
Si ese método tampoco está permitido, puede escribir su propio procedimiento de clasificación con el comparador correspondiente:
def compare(x, y): return -cmp(x[0], y[0]) or cmp(x[1], y[1]) def quicksort(lst): if not lst: return [] return (quicksort([x for x in lst[1:] if compare(x, lst[0]) < 0]) + [lst[0]] + quicksort([x for x in lst[1:] if compare(x, lst[0]) >= 0])) quicksort([[1, 'orange'], [3, 'banana'], [2, 'pear'], [1, 'apple']]) => [[3, 'banana'], [2, 'pear'], [1, 'apple'], [1, 'orange']]