Подтвердить что ты не робот

Как Python сортирует список кортежей?

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

4b9b3361

Ответ 1

Он автоматически сортирует список кортежей по первым элементам в кортежах, затем по вторым элементам и т.д. ([1,2,3]) будет идти до кортежа ([1,2,4]). Если вы хотите переопределить это поведение, передайте в качестве второго аргумента метод сортировки. Этот вызываемый должен возвращать 1, -1, 0.

Ответ 2

Да, это значение по умолчанию. Фактически, это является основой классической идиомы DSU (Decorate-Sort-Undecorate) в Python. См. Код как Pythonista.

Ответ 3

Нет, кортежи типы последовательностей точно так же, как строки. Они сортируются одинаково, сравнивая каждый элемент по очереди:

>>> import random
>>> sorted([(0,0,0,int(random.getrandbits(4))) for x in xrange(10)])
[(0, 0, 0, 0), (0, 0, 0, 4), (0, 0, 0, 5), (0, 0, 0, 7), (0, 0, 0, 8),
(0, 0, 0, 9), (0, 0, 0, 12), (0, 0, 0, 12), (0, 0, 0, 12), (0, 0, 0, 14)]

Три нули только там, чтобы показать, что нужно проверять что-то, отличное от первого элемента.

Ответ 4

Попробуйте использовать метод сортировки внутреннего списка и передайте лямбда. Если первый элемент кортежей является целым числом, это должно работать.

# l is the list of tuples
l.sort(lambda x,y: x-y)

Вы можете использовать любые вызываемые для функции сравнения, не обязательно лямбда. Однако ему нужно вернуть -1 (меньше), 0 (равно) или 1 (больше).

Ответ 5

Отъезд "Devin Jeanpierre" ответ на этот вопрос sort-a-dictionary-in-python-by-the-value, где он говорит, чтобы использовать кортеж и показывает, как сортировать по второму значению