Chciałbym uporządkować listę 2D, gdzie każdy „rząd” ma wielkość 2, podobnie jak na przykładSortowanie za pomocą funkcji porównanie funkcji
[[2,5],[2,3],[10,11]]
Te wiersze reprezentują zakresy w rzeczywistości, więc jej zawsze [a , b] gdzie chcę sortować dokładnie w ten sposób, każdy element listy będący 2-listą, bym miał (według porządku priorytetu): [a1, b1] [a2, b2]
1. If a1 < a2 do not permute
2. If a1 > a2 permute
3. If a1 == a2 then permute if (b1 - a1) > (b2 - a2)
To, co uważam za głupie, to to, że pyton nie pozwala już na funkcje porównawcze. Zamiast tego wykorzystuje kluczową funkcję. W żaden sposób nie mogę zrobić z tego ważnego klucza, ponieważ opieram moje porównanie na dwóch parametrach, wartości liczbowej "a" (która przeważa), a następnie długości zakresu (b - a).
Jak mogę to posortować? Mam na myśli, bez wywoływania dwa razy sortowane() lub coś, co moim zdaniem jest brzydkie.
Czy to możliwe? Czy jest coś, czego nie widzę?
Dzięki!
podczas wywoływania sortowane (elementy, cmp = func) na Python 3.3.3 daje mi „«cmp»jest niepoprawny argument kluczowe dla tej funkcji” – Yannick
[docs] (https://docs.python.org/3/howto/sorting.html) oferuje funkcję konwersji 'cmp' to' key', ale nie jest aż tak ładna. –
Możesz także utworzyć klasę dla wewnętrznej listy i zastąpić funkcję ['__cmp__'] (https://docs.python.org/2/reference/datamodel.html#object.__cmp__) –