Может ли функция сравнения быть сделана из двух условий, соединенных 'и' в python (для сортировки)? - PullRequest
1 голос
/ 25 мая 2019

У меня есть список типа:

ans=[(a,[b,c]),(x,[y,z]),(p,[q,r])]

Мне нужно отсортировать список, используя следующее условие:

if (ans[j][1][1]>ans[j+1][1][1]) or (ans[j][1][1]==ans[j+1][1][1] and ans[j][1][0]<ans[j+1][1][0]):
     # do something (like swap(ans[j],ans[j+1]))

Мне удалось реализовать с помощью bubble sort, но я хочу более быстрый метод сортировки .Есть ли способ сортировки моего списка с помощью функций sort() или sorted() (с использованием компаратора или чего-то подобного), относящихся к моему состоянию?

1 Ответ

2 голосов
/ 25 мая 2019

Вы можете создать функцию компаратора, которая перенастраивает кортеж;кортежи сравниваются слева направо, пока один из элементов не станет «больше», чем другой.Ваш пример ввода / вывода совершенно отсутствует, но я верю, что это приведет к тому, что вы хотите:

def my_compare(x):
    return x[1][1], x[1][0]

ans.sort(key=my_compare)
# ans = sorted(ans, key=my_compare)

По существу, это сначала сравнит значение x[1][1] для ans[j] и ans[j+1], иесли он такой же, он будет сравнивать значение x[1][0].Вы можете переупорядочить и добавить больше компараторов, если хотите, если это не соответствует вашему случаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...