ten powinien działać dobrze:
lst.sort(key=lambda x:x[2], reverse=True)
Oczywiście, możemy uniknąć lambda przez:
import operator
lst.sort(key=operater.itemgetter(2), reverse=True)
Jeśli chcesz posortować na wielu warunków, można tworzyć ciekawe funkcje, aby powrócić krotki (krotki będą sortować według pierwszego indeksu, potem drugiego, potem trzeciego ...), albo możesz użyć faktu, że rodzaje Pythona mają gwarancję stabilności. Jeśli chcesz, aby twoja lista była sortowana według wagi, a następnie według nazwy węzła, najpierw sortuj według nazwy węzła, a następnie według wagi. (Kolejność wstecz jest trochę sprzeczna z intuicją).
Jeśli rozumiem Twoje pytanie (po re-read i widząc niektóre komentarze tutaj) masz do sortowania może być wykonane w następujący sposób:
lst.sort(key=lambda x: (-x[2],x[0])) #relying on tuples
ta sortuje głównie wagowych (duża liczba pierwsza) a następnie według węzła1 alfabetycznie dla obiektów o tej samej wadze.
Należy zauważyć, że działa to tylko wtedy, gdy można negować x[2]
, aby wysokie liczby pojawiły się jako pierwsze w sortowaniu (na przykład nie działałoby dla łańcuchów). Bardziej niezawodny sposób na osiągnięcie tego samego (choć mniej wydajnego?) Będzie:
lst.sort(key=lambda x: x[0])
lst.sort(key=lambda x: x[2], reversed=True)
Masz na myśli "krawędź o większej wadze"? Zakładam, że krotka '(węzeł1, węzeł2, waga) reprezentuje krawędź. –