Чтобы отсортировать список нужно написать:
s.sort()
Чтобы сделать отсортированного копию списка (при этом s не изменится) нужно написать:
cs = sorted(s)
Если между собой сравниваются кортежи, то они сначала сравниваются по нулевым элементам, в случае равенства - по первым и т.п. (как строки по буквам).
Если хочется отсортировать по убыванию, то нужно в метод sort (или функцию sorted) передать именованный параметр reverse=True.
Чтобы отсортировать произвольным образом в функцию sort передается именованный параметр key - название функции с одним параметром, которая принимает на вход элемент списка, а выдает нечто сравнимое. По тому что выдает эта функция и осуществляется сортировка.
Пример: отсортировать список слов без учета больших и маленьких букв (такой порядок называется алфавитным, в отличие от лексикографического, где размер букв имеет значение).
sort(s, key=str.lower)
str.lower - это функция, которая принимает на вход строку и возвращает ту же строку, состояющую из маленьких букв.
Если нам нужно отсортировать кортежи в порядке возрастания нулевого значения, а при равных нулевых - в порядке убывания первого, то мы можем слепить свою функцию. Примерно так:
def myKey(x):
return (x[0], -x[1])
s.sort(key=myKey)
Здесь функция получает на вход кортеж и возвращает кортеж, но уже такой, который при сравнении с другим модернизированным кортежем даст нам правильный результат сравнения.
Для экономии места функцию явно не объявляют, а пользуются lambda-функцией. lambda-функции нужны, если мы нигде кроме сортировки не пользуемся функцией для ключей и не хотим загромождать программу (а мы не хотим). Аналогичную предыдущей задачу можно решить вот так:
s.sort(key=lambda x: (x[0], -x[1]))
У лямбда функции нет названия. x - это то, что она получает на вход в качестве параметра.
Больше примеров лямбда-функций вы можете найти в своем конспекте: http://nbviewer.ipython.org/github/alzobnin/hse-cs-prog/blob/master/03.ipynb
s.sort()
Чтобы сделать отсортированного копию списка (при этом s не изменится) нужно написать:
cs = sorted(s)
Если между собой сравниваются кортежи, то они сначала сравниваются по нулевым элементам, в случае равенства - по первым и т.п. (как строки по буквам).
Если хочется отсортировать по убыванию, то нужно в метод sort (или функцию sorted) передать именованный параметр reverse=True.
Чтобы отсортировать произвольным образом в функцию sort передается именованный параметр key - название функции с одним параметром, которая принимает на вход элемент списка, а выдает нечто сравнимое. По тому что выдает эта функция и осуществляется сортировка.
Пример: отсортировать список слов без учета больших и маленьких букв (такой порядок называется алфавитным, в отличие от лексикографического, где размер букв имеет значение).
sort(s, key=str.lower)
str.lower - это функция, которая принимает на вход строку и возвращает ту же строку, состояющую из маленьких букв.
Если нам нужно отсортировать кортежи в порядке возрастания нулевого значения, а при равных нулевых - в порядке убывания первого, то мы можем слепить свою функцию. Примерно так:
def myKey(x):
return (x[0], -x[1])
s.sort(key=myKey)
Здесь функция получает на вход кортеж и возвращает кортеж, но уже такой, который при сравнении с другим модернизированным кортежем даст нам правильный результат сравнения.
Для экономии места функцию явно не объявляют, а пользуются lambda-функцией. lambda-функции нужны, если мы нигде кроме сортировки не пользуемся функцией для ключей и не хотим загромождать программу (а мы не хотим). Аналогичную предыдущей задачу можно решить вот так:
s.sort(key=lambda x: (x[0], -x[1]))
У лямбда функции нет названия. x - это то, что она получает на вход в качестве параметра.
Больше примеров лямбда-функций вы можете найти в своем конспекте: http://nbviewer.ipython.org/github/alzobnin/hse-cs-prog/blob/master/03.ipynb
Последнее изменение: Суббота, 15 Август 2020, 02:35