Автор оригинала: Pankaj Kumar.
Сортировка списка Python Sort () сортирует элементы списка в порядке возрастания. Этот метод сортируется
Python имеет встроенную функцию – отсортирован () – который используется для создания отсортированного списка от именителя.
1. Использование метода списка Python по умолчанию ()
По умолчанию метод Sort () списка в Python устраняет элементы списка в порядке возрастания. Это также естественный способ сортировки элементов.
numbers_list = [3.4, 5.1, 2.2, 4.1, 1.0, 3.8]
print(f'Before sorting: {numbers_list}')
numbers_list.sort()
print(f'After sorting: {numbers_list}')
Выход :
Before sorting: [3.4, 5.1, 2.2, 4.1, 1.0, 3.8] After sorting: [1.0, 2.2, 3.4, 3.8, 4.1, 5.1]
Рекомендуется читать : Python F-струны
Элементы также могут быть символы или цифры, а метод сортировки () будет продолжать сортировать в порядке возрастания.
str_list = ['a', 'c', 'd', 'b', 'B', 'C', '1'] str_list.sort() print(str_list) # ['1', 'B', 'C', 'a', 'b', 'c', 'd']
2. Обратная сортировка списка с использованием метода сортировки ()
Если вы хотите, чтобы сортировка была сделана в обратном порядке, пропустите Обратный аргумент как правда. Мы можем использовать это, чтобы сортировать список номеров в порядке убывания.
numbers_list = [3.4, 5.1, 2.2, 4.1, 1.0, 3.8]
print(f'Before sorting: {numbers_list}')
numbers_list.sort(reverse=True)
print(f'After sorting: {numbers_list}')
Выход :
Before sorting: [3.4, 5.1, 2.2, 4.1, 1.0, 3.8] After sorting: [5.1, 4.1, 3.8, 3.4, 2.2, 1.0]
3. Сортировка вложенного списка с помощью Python Sort ()
Если мы вызовите функцию списка Python Sort () в вложенном списке, для сортировки используются только первые элементы из элементов списка элементов. Давайте понять это простым примером.
numbers = [[1, 2], [2, 1], [4, 3], [5, 2], [3, 3]]
print(f'Before sorting: {numbers}')
numbers.sort()
print(f'After sorting: {numbers}')
Выход :
Before sorting: [[1, 2], [2, 1], [4, 3], [5, 2], [3, 3]] After sorting: [[1, 2], [2, 1], [3, 3], [4, 3], [5, 2]]
Понятно, что сортировка выполняется на основе первого элемента в вложенном списке. Но иногда мы хотим отсортировать вложенный список на основе положений разных элементов.
Скажем, вложенный список содержит информацию о имени, возрасте человека и пола. Давайте посмотрим, как сортировать этот вложенный список на основе возраста, который является вторым элементом в вложенном списке.
def custom_key(people):
return people[1] # second parameter denotes the age
persons = [['Alice', 26, 'F'], ['Trudy', 25, 'M'], ['Bob', 25, 'M'], ['Alexa', 22, 'F']]
print(f'Before sorting: {persons}')
persons.sort(key=custom_key)
print(f'After sorting: {persons}')
Выход:
Before sorting: [['Alice', 26, 'F'], ['Trudy', 25, 'M'], ['Bob', 25, 'M'], ['Alexa', 22, 'F']] After sorting: [['Alexa', 22, 'F'], ['Trudy', 25, 'M'], ['Bob', 25, 'M'], ['Alice', 26, 'F']]
Мы используем ключевой аргумент для указания элемента для использования для сортировки. custom_key Функция Возвращает ключ, чтобы сортировать список.
4. Пользовательская логика для сортировки списка
Мы также можем реализовать свою собственную логику для сортировки элементов списка.
В последнем примере мы использовали возраст в качестве ключевого элемента для сортировки нашего списка.
Но там идет поговорка, – первые дамы! ».
Итак, мы хотим отсортировать наш список таким образом, что женский пол получает приоритет над самцом. Если гендер двух человек соответствует, младший получает более высокий приоритет.
Итак, мы должны использовать клавишный аргумент в нашей функции сортировки. Но функция сравнения должна быть преобразована в ключ.
Итак, нам нужно импортировать библиотеку под названием Functools Отказ Мы будем использовать функцию cmp_to_key () Чтобы преобразовать нашу функцию сравнения в ключ.
import functools
def compare_function(person_a, person_b):
if person_a[2] == person_b[2]: # if their gender become same
return person_a[1] - person_b[1] # return True if person_a is younger
else: # if their gender not matched
if person_b[2] == 'F': # give person_b first priority if she is female
return 1
else: # otherwise give person_a first priority
return -1
persons = [['Alice', 26, 'F'], ['Trudy', 25, 'M'], ['Bob', 24, 'M'], ['Alexa', 22, 'F']]
print(f'Before sorting: {persons}')
persons.sort(key=functools.cmp_to_key(compare_function))
print(f'After sorting: {persons}')
Выход:
Before sorting: [['Alice', 26, 'F'], ['Trudy', 25, 'M'], ['Bob', 24, 'M'], ['Alexa', 22, 'F']] After sorting: [['Alexa', 22, 'F'], ['Alice', 26, 'F'], ['Bob', 24, 'M'], ['Trudy', 25, 'M']]
Список отсортирован на основе пола первым. Тогда он отсортирован на основе возраста лиц.
5. Сортировка списка объектов с использованием Python Sort ()
Сортировка по умолчанию работает по номерам и строкам. Но он не будет работать в списке пользовательских объектов. Посмотрим, что произойдет, когда мы стараемся запустить сортировку по умолчанию в список объектов.
class Employee:
def __init__(self, n, a, gen):
self.name = n
self.age = a
self.gender = gen
def __str__(self):
return f'Emp[{self.name}:{self.age}:{self.gender}]'
# List uses __repr__, so overriding it to print useful information
__repr__ = __str__
e1 = Employee('Alice', 26, 'F')
e2 = Employee('Trudy', 25, 'M')
e3 = Employee('Bob', 24, 'M')
e4 = Employee('Alexa', 22, 'F')
emp_list = [e1, e2, e3, e4]
print(f'Before Sorting: {emp_list}')
try:
emp_list.sort()
except TypeError as te:
print(te)
Выход:
Before Sorting: [Emp[Alice:26:F], Emp[Trudy:25:M], Emp[Bob:24:M], Emp[Alexa:22:F]] '<' not supported between instances of 'Employee' and 'Employee'
В этом случае мы должны обязательно предоставить ключевую функцию для указания поля объектов, которые будут использоваться для сортировки.
# sorting based on age
def sort_by_age(emp):
return emp.age
emp_list.sort(key=sort_by_age)
print(f'After Sorting By Age: {emp_list}')
Выход:
After Sorting By Age: [Emp[Alexa:22:F], Emp[Bob:24:M], Emp[Trudy:25:M], Emp[Alice:26:F]]
Мы также можем использовать модуль Functools для создания пользовательской логики сортировки для элементов списка.
Ссылки : Официальная документация API