Автор оригинала: Carrie-Anne Pienaar.
Если вы работаете в карьере, управляемой данными, шансы вы будете в какой-то момент, должны выполнять сортировку ваших данных. Вместо того, чтобы писать свой собственный алгоритм сортировки (который, скорее всего, будет намного менее эффективным), Python предоставляет Встроенная функция называется отсортировано ()
Отказ Эта функция позволяет делать базовую сортировку, такую как размещение в порядке возрастания или в алфавитном порядке, но также имеет возможность пользовательской сортировки, в которой вы можете сортировать в соответствии с вашими собственными спецификациями.
Определение
отсортировано ()
Функция принимает указанный утечный вход и возвращает Сортированный список Отказ
Например:
>>> x = [4, 1, 2] >>> sorted(x) [1, 2, 4]
Важно отметить, что отсортировано ()
Функция не мутирует оригинальный список х
; Это создает новый список которые можно хранить в отдельной переменной.
Параметры
отсортировано ()
Функция занимает не более 3 аргументов:
sorted(iterable, key = None, reverse = False)
- ИТЕРИТЕЛЬНО : Это последовательность, которую нужно отсортировать. Он принимает несколько типов данных, таких как строка , Список , кортеж , Словарь и т. Д. И включает Вложенные списки Отказ Независимо от того, какой тип данных вводится, однако,
отсортировано ()
Функция всегда будет возвращать список. ключ
: Это необязательный аргумент вотсортировано ()
Функция с умолчанием бытьНет
Отказ Параметр клавиш позволяет вводить функцию (встроенную или собственную функцию), чтобы настроить, как ваш список отсортирован.- Обратный : Это необязательный аргумент, который указывает, следует ли отсортировать данные в порядке возрастания или убывания. Аргумент по умолчанию это
Ложь
означает, что данные будут отсортированы в порядке возрастания.
Сортировка строк
При сортировке строк по умолчанию необходимо организовать каждый символ в строке в порядке возрастания и вернуть список этих символов.
Пример 1: одно слово
>>> word = 'Python' >>> sorted(word) ['P', 'h', 'n', 'o', 't', 'y']
Пример 2: многократная слона слова
>>> sentence = 'I love Python!' >>> sorted(sentence) [' ', ' ', '!' 'I', 'P', 'e', 'h', 'l', 'n', 'o', 'o', 't', 'v', 'y']
Как видно в приведенном выше примере, когда отсортировано ()
Функция вызывается в строке нескольких слов, каждый символ в строке обрабатывается как элемент списка, включая пустые пространства. Python заказывает эти элементы, используя Стандарт Unicode Отказ Какой стандарт Unicode является назначение уникальным кодом каждому персонажу на всех человеческих языках. Это позволяет Python сравнивать нечеловеческие символы на численной основе, поскольку каждый символ имеет свое назначение целочисленного значения.
Если, однако, вы хотите заказать строку в соответствии с словами в строке, а не по каждому символу, .split ()
Строковый метод можно использовать.
Пример 3: Заказ слова в предложении
>>> phrase = 'The cat in the hat' >>> sorted(phrase.split()) ['The', 'cat', 'hat', 'in', 'the']
Пример 4: Заказ слова в списке
>>> words = ['Book', 'Bag', 'pencil', 'basket'] >>> sorted(words) ['Bag', 'Book', 'basket', 'pencil']
Этот пример лучше демонстрирует, как используется стандарт Unicode. Python Заказывает эти данные, первоначально сравнивающие первые буквы каждого слова, и если она находит, чтобы они были одинаковыми, перейдем к сравнению вторых букв, а затем третий и так далее. Сортировка поставила слово «книгу» перед «корзиной», рассказывая нам, что заглавные и строчные буквы не имеют одинаковой точки кода Unicode. В целом заглавные буквы будут иметь более низкие кодовые точки, чем строчные аналоги, и, таким образом, слова «сумка» и «Книга» размещаются в начале списка. Поскольку первая буква, «B», одинаково в обоих словах, Python продолжает сравнивать вторые буквы.
Список списков и другие сложные типы данных
Как указано ранее, при сортировке данных всех числовых значений по умолчанию – сортировка значений в порядке возрастания. Создан новый список упорядоченных значений, который может храниться в новой переменной.
Пример 1: сортировка списка числовых значений
>>> values = [3, 2, 6, 5] >>> sorted_values = sorted(values) >>> print(sorted_values) [2, 3, 5, 6]
Пример 2: сортировка кортежа цифровых значений
>>> numbers = (9, 2, 6, 3, 1) >>> sorted_numbers = sorted(numbers) >>> print(sorted_numbers) [1, 2, 3, 6, 9]
Обратите внимание, что, хотя мы вставили кортеж, отсортировано ()
Функция всегда возвращает список. При желании вы можете преобразовать отсортированный список в кортеж, используя кортеж ()
Функция и хранить его в новой переменной:
>>> sorted_numbers_tup = tuple(sorted_numbers) >>> print(sorted_numbers_tup) (1, 2, 3, 6, 9)
Пример 3: сортировка словаря
>>> d = {4: 'a', 3: 'b', 1: 'c'} >>> sorted(d) [1, 3, 4]
Обратите внимание, что только в списке кнопки словаря возвращаются в список, потому что, чтобы вернуть как словарную клавишу, так и значение, аргумент клавиши в отсортировано ()
Функция должна быть использована. Затем это вернет Список кортеж S, который можно преобразовать в Словарь Использование функции Dict ()
Отказ Использование ключей будет покрыто позже в этой статье.
Пример 4: сортировка набора
>>> s = {10, 2, 7, 3} >>> sorted_s = sorted(s) >>> print(sorted_s) [2, 3, 7, 10]
Попытка преобразовать этот упорядоченный список в комплект, однако, заставит вас потерять заказ, потому что набор, по определению, неупорядован.
>>> set(sorted_s) {10, 2, 3, 7}
Пример 5: сортировка вложенного списка
>>> a = [[2, 4], [3, 2], [1, 5], [1, 1]] >>> sorted(a) [[1, 1], [1, 5], [2, 4], [3, 2]]
Здесь Python следует тот же метод, что и при сортировке списка слов. Начальное упорядочение сравнивает первые элементы вложенных списков. Списки с одним и тем же первым элементом затем сравниваются с использованием их второго элементов и так далее. Более короткие списки также расположены до более длинных списков, учитывая, что их начальные элементы одинаковы.
>>> b = [[1, 2, 3], [2, 4], [1, 2]] >>> sorted(b) [[1, 2], [1, 2, 3], [2, 4]]
Использование клавиша аргумент
Ключевой аргумент в отсортировано ()
Функция – это чрезвычайно полезный инструмент, потому что он позволяет сортировать данные в соответствии с вашими точными спецификациями. Функция, которую вы вводите, рассказывает Python, как вы хотите, чтобы ваши данные были заказаны. Python применяет эту функцию для каждого элемента и заказывает результаты. Для этого вы можете использовать один из обширных функций Python или создать собственную функцию в соответствии с вашими потребностями.
Пример 1: Использование встроенной функции, сумма ()
>>> marks = [[1, 4, 5], [2, 1, 2], [2, 3, 5]] >>> sorted(marks, key = sum) [[2, 1, 2], [1, 4, 5], [2, 3, 5]]
В этом примере приказывает вложенные списки на сумму каждого списка, наименьшего для самых больших, а не по умолчанию на заказ элементами.
Пример 2: Использование собственной функции
>>> def temp(day): return day[1] >>> weather = [['Monday', 25], ['Tuesday', 21], ['Wednesday', 30]] >>> sorted(weather, key = temp) [['Tuesday', 21], ['Monday', 25], ['Wednesday', 30]]
Этот пример демонстрирует, как вы будете сортировать список в соответствии со вторым элементом каждого списка, а не первого. Сначала определим функцию, которая возвращает второй элемент каждого списка, а затем использовать эту функцию в качестве нашей клавиши. Конечно, это, возможно, не самый питонический способ получить этот результат. Temp ()
Функция может быть конденсирована в одну строку, используя лямбда Отказ
Пример 3: Использование лямбда в ключ
>>> sorted(weather, key = lambda day: day[1]) [['Tuesday', 21], ['Monday', 25], ['Wednesday', 30]]
Только эти несколько примеров демонстрируют мощность ключевого аргумента.
Использование обратного аргумента
Обратный
Аргумент – довольно простая концепция, чтобы понять. Вы используете его, когда вы хотите, чтобы ваши данные организованы в спуске, а не по возрастанию. Требуется только логическое значение, с Правда
Ссылаясь на порядок убывания и Ложь
Ссылаясь на возрастающий порядок. По умолчанию, конечно, это Ложь
Отказ
Пример: сортировка по убыванию
>>> y = [2, 5, 1, 7] >>> sorted(y, reverse = True) [7, 5, 2, 1]
Тот же метод используется, что означает, что первые элементы сравниваются, то второй и т. Д., Чтобы найти самые большие элементы. Обратный аргумент можно комбинировать с ключевым аргументом для создания более сложных сортов.
Пытаясь сравнить элементы разных типов
Ограничение отсортировано ()
Функция состоит в том, что она не может сравнить различные типы данных. Например, попытка сортировать список, который содержит как типы строковых и типов INT, приводит к тому, что Типеррор
Отказ Это довольно интуитивно понятно; Как мы могли бы решить, что нужно сначала между элементами «Яблоки» и 23.
Сравнение, которое можно сделать между различными типами, однако, сравнивает числовой тип (INT или Float ) с логическим типом. Это связано с тем, что два логических значения, которые каждый из которых имеет неотъемлемое числовое значение, True имеет значение 1 и false имеет значение 0. Это означает, что мы можем сравнить списки, которые имеют числовые типы, а также булевые выражения, поскольку они будут оценивать на Правда
или Ложь
Отказ
Пример:
>>> z = [1, 'A' == 'B', 4 > 3, 0] >>> sorted(z) [False, 0, 1, True]
Сортировка устойчивости
Полезная особенность отсортировано ()
Функция что-то называется сортировка стабильности Отказ Это означает, что если у вас есть у вас есть с несколькими элементами одного и того же значения, они будут поддерживать свой первоначальный порядок относительно друг друга. Это очень полезно, когда у вас есть два или более итераций, например, список кортежей.
Пример:
>>> books_read = [('Steve', 50), ('Dave', 20), ('Fiona', 37), ('Roger', 20)] >>> sorted(books_read, key = lambda name: name[1]) [('Dave', 20), ('Roger', 20), ('Fiona', 37), ('Steve', 50)]
В этом примере список кортежей показывает, сколько книг каждый человек прочитал через год. Простая функция Lambda была использована для сравнения кортежей, использующих второе значение в каждом кортеже, а не первым. Вы можете увидеть, что Дейв и Роджер читают одинаковое количество книг, но когда был заказан список, они держали свою позицию относительно друг друга.
Разница между list.sort () и отсортированными () функциями
В качестве окончательного примечания существует аналогичная функция, которая существует для сортировки списков, называемых list.sort ()
Отказ Работает так же, как отсортировано ()
Функция, однако, существует ключевое различие между двумя. Когда вы называете функцию list.sort ()
, он мутирует оригинальный список, который вы сортируете и возвращаете Нет
Отказ
>>> a = [5, 2, 6, 3] >>> list.sort(a) >>> a [2, 3, 5, 6]
Следовательно, при принятии решения о том, какие функции использовать, важно учитывать, нужно ли вам сохранить оригинальные, неупорядоченные данные. Если есть небольшой шанс, вам это понадобится снова, отсортировано ()
Функция – лучший вариант. Не только это не будет мутировать оригинальный список, но, как упоминалось ранее, он примет любой счетчик, что делает его гораздо более мощной функцией.
Для ради интереса здесь есть ссылка на сортировочный алгоритм, используемый Python: Timsort
Чтобы повысить свои навыки Python, скачайте наш ручной работы Python Cheat Pheet и присоединяйтесь к нашей электронной почте (бесплатно):