jak posortować listę dwuwymiarowo ??

0

Hej,
mam pytanie, jak w tytule, jak posortować listę

a = [[2, 3], [3, 4], [5, 6], [2, 6], [3, 7], [2, 4], [3, 7], [2, 1], [3, 1]]

dwuwymiarowo ?? Kiedyś to robiłem, ale nie pamiętam jak :) Efekt oczekiwany:

a = [[2, 6], [2, 4], [2, 3], [2, 1], [3, 7], [3, 7], [3, 4], [3, 1], [5, 6]]

Czyli pierwszy wymiar sortujemy rosnąco, a drugi malejąco :)

1

Potrzebujesz komparatora, który porównuje pary liczb (z pamięci):

def comparator(a, b):
    if (a == b):
        return 0
    if (a[0] < b[0] || (a[0] == b[0] && a[1] < b[1])):
        return -1
    return 1

-- EDIT --
Nie doczytałem, że drugi malejąco, sorry :)

0

Ja bym zrobił tak:

  1. Sortujesz całą tablicę na podstawie 1 wymiaru.
  2. Dzielisz tablicę na n podtablic, gdzie każda podtablica zawiera elementy o takim samym 1 wymiarze.
  3. Sortujesz każdą podtablicę malejąco według 2 wymiaru.
    Ale na pewno da się to zrobić dużo efektywniej.
0

nie takie proste z tymi komparatorami, jakoś tak to ogarnąłem (nietypowo):

sorted(a, key=lambda x: 2018*x[0]-x[1])
1

Nie lepiej tak:
sorted(a, key=lambda e: (e[0], -e[1]))
?

1 użytkowników online, w tym zalogowanych: 0, gości: 1