Разрыв связей в сортировке Python

У меня есть list tuple s, каждый кортеж содержит два целых числа. Мне нужно отсортировать список (в обратном порядке) в соответствии с разницей целых чисел в каждом кортеже, но разрыв связей с большим первым целым числом.

пример

Для [(5, 6), (4, 1), (6, 7)] следует получить [(4, 1), (6, 7), (5, 6)] .

Мой путь

Я уже решил это, сделав dictionary который содержит разницу в качестве key и кортежа как value . Но все это немного неуклюже.

Что лучше?

One Solution collect form web for “Разрыв связей в сортировке Python”

Используйте key функцию для sorted() и возврата кортежа; значения будут отсортированы лексикографически:

 sorted(yourlst, key=lambda t: (abs(t[0] - t[1])), t[0]), reverse=True) 

Я использую abs() здесь, чтобы вычислить разницу, независимо от того, какой из двух целых чисел больше.

Для ввода образца введите ключ (1, 5) , (3, 4) и (1, 6) ; в обратном порядке, что ставит (1, 6) (для (6, 7) кортежей) до (1, 5) (что соответствует (5, 6) ).

Демо-версия:

 >>> yourlst = [(5, 6), (4, 1), (6, 7)] >>> sorted(yourlst, key=lambda t: (abs(t[0] - t[1]), t[0]), reverse=True) [(4, 1), (6, 7), (5, 6)] 
  • Как сортировать столбцы в файле Excel с помощью xlwings?
  • как заставить результат argsort быть случайным между равными значениями?
  • Как отсортировать элементы в Qt QListview с помощью Qt.UserRole
  • Сортировка списков в python
  • Способ сортировки списка списков?
  • номера сортировки python ttk treeview
  • Как отсортировать массив целых чисел быстрее, чем quicksort?
  • Python сортирует список списков / по возрастанию, а затем расширяет
  • Python - лучший язык программирования в мире.