Сортировка списка в Python 3 с тай-брейком - PullRequest
0 голосов
/ 22 января 2019

Я видел много подобных вопросов здесь, но ни один из них до сих пор не ответил прямо на вопрос, но вместо этого предоставил обходные пути в конкретных сценариях к проблеме задающего.

Я хотел бы получить общий ответ на вопрос о разрыве связей в Timsort из Python. Это можно сделать? Если это можно сделать, каков общий способ сделать это?

Например, возьмите список кортежей

>>> tuples = [(2,1), (2,9), (3, 8), (1,3), (1,2), (1,1)]

Я хочу отсортировать эти кортежи так, чтобы их порядок определялся главным образом значением первого значения в каждом кортеже. Если мы оставим reversed=False, то они будут отсортированы по возрастанию. Я бы сделал это со следующим

>>> tuples.sort(key=lambda t: t[0])

Результат будет

>>> tuples
[(1,3), (1,2), (1,1), (2,1), (2,9), (3, 8)]

Вопрос в том, что я могу сделать вообще, чтобы разорвать связь между первыми тремя элементами. Я хотел бы знать, возможно ли это вообще и применимо ли в любой задаче, где возникает определение ключа сортировки.

В большинстве случаев в других ответах упоминается, что Timsort стабилен . Означает ли это правило, что невозможно разорвать связи?

1 Ответ

0 голосов
/ 22 января 2019

Насколько я понимаю, вы хотели бы сначала отсортировать по начальному значению, а затем отсортировать по второму значению кортежа, не теряя исходного отсортированного списка.

попробуйте это

tuples.sort(key=lambda x: (x[0], x[1]))

Inв этом случае x [0] и x [1] являются первичным и вторичным ключом сортировки соответственно.Надеюсь, это поможет.

...