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



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

427   5  

5 ответов:

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

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

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

>>> 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)]

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

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

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

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

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

Comments

    Ничего не найдено.