Список сортировки Python - PullRequest
       12

Список сортировки Python

0 голосов
/ 11 января 2011

В настоящее время я нахожусь на python и довольно плохо знаком с этим языком.

Сортировка списка на основе двух критериевДавайте список слов, возвращайте список с одинаковыми словами в порядке длины (от самого длинного до самого короткого),критерии второго рода должны быть в алфавитном порядке.Подсказка: вам нужно подумать о двух функциях.

Может кто-нибудь помочь мне с этим?

Ответы [ 5 ]

7 голосов
/ 11 января 2011

Вам нужен только один вызов sort, потому что Python автоматически сортирует кортежи лексикографически.То есть, если вы попросите Python сравнить два кортежа, он упорядочит их по первому элементу, за исключением случаев, когда сравниваются равные, в этом случае он упорядочит их по второму элементу, за исключением случаев, когда сравниваются равные в этом случае ...*

Вы хотите отсортировать список элементов по минус их длине, а затем по алфавиту, поэтому вы хотите, чтобы ключ строки s был кортежем (-len(s), s).Отсюда:

>>> l = ['aa','aaa','aaaa','b','bb','z','ccc']
>>> sort_key = lambda s: (-len(s), s)
>>> l.sort(key=sort_key)
>>> l
['aaaa', 'aaa', 'ccc', 'aa', 'bb', 'b', 'z']
3 голосов
/ 11 января 2011

Дизайн

Ключевое слово здесь " алгоритм стабильной сортировки ".Подумайте о двух стабильных функциях сортировки:

  • одна сортировка по длине (с сохранением относительного порядка записей одинаковой длины),
  • другая сортировка по алфавиту.

В каком порядке вы бы их объединили, чтобы получить желаемый порядок?

Реализация

Как уже упоминалось, первую функцию сортировки можно вызвать какthis:

list.sort(key=len, reverse=True)

Вторая функция сортировки может быть вызвана так:

list.sort()

Этого должно быть достаточно для написания полного решения.

Результат

Если вы правильно комбинируете функцию, вы должны получить следующее:

>>> l = ['aaa', 'fff', 'bbb', 'ddd', 'e', 'cccc']
# ... sorting functions combined in the right way ...
>>> l
['cccc', 'aaa', 'bbb', 'ddd', 'fff', 'e']
2 голосов
/ 11 января 2011

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

>>> l = ['aa','aaa','aaaa','b','bb','z','ccc']
>>> l.sort(key=len,reverse=True)
>>> l
['aaaa', 'ccc', 'aaa', 'bb', 'aa', 'z', 'b']
>>> l.sort()
>>> l
['aa', 'aaa', 'aaaa', 'b', 'bb', 'ccc', 'z']
>>> 
1 голос
/ 11 января 2011

Подсказки:

mylist = ['one', 'three', 'zero']

mylist.sort(key=len)

print mylist

mylist.reverse()

print mylist

mylist.sort()

print mylist

otherlist = [(2, 'a'), (1, 'a'), (3, 'b'), (3, 'a')]

otherlist.sort()

print otherlist
0 голосов
/ 11 января 2011
a = sorted([["foo", "o"], ["bar2", "yadda"], ["allo","as3r"]], key=len)
b = sorted(a)

Я верю, что это работает ... Я новичок в Python

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