Python List sort() с примери

⚡ Умно обобщение

Python list sort() подрежда елементите на списък на място, възходящо по подразбиране или низходящо чрез параметъра reverse, докато опционална ключова функция сортира по персонализирани критерии, като например дължина, кортежни полета или потребителски дефинирани функции.

  • 🔘 Синтаксис: Методът sort() приема незадължителни параметри key и reverse и променя оригиналния списък, без да създава копие.
  • ☑️ Контрол на поръчките: Задаването на параметъра reverse на True сортира стойностите от най-високата към най-ниската, вместо във възходящ ред по подразбиране.
  • Ключов параметър: Ключова функция, като например len, сортира елементите по производна стойност, като например дължина на низ или поле за кортеж.
  • 🧪 сортиране срещу сортирано: Методът sort() променя списъка на място и връща None, докато sorted() връща нов списък и запазва оригинала.
  • 🛠️ Персонализирани критерии: Ламбда изразите и потребителски дефинираните функции позволяват на sort() да подрежда кортежи, речници и именувани кортежи по произволен избран атрибут.
  • 🤖 Работни процеси с изкуствен интелект: Машинното обучение сортира прогнозите по резултат и избира най-добрите резултати преди класиране или оценка.

Python Сортиране по списък()

Какво представлява методът sort() в Python?

Функцията sort() в Python Помага за сортиране на списък във възходящ или низходящ ред. Може да се използва за сортиране на числов списък, кортежи и списък с низове. Не създава отделен списък, а модифицира или сортира оригинала.

Синтаксис на метода за сортиране в Python

Функцията за сортиране има следния синтаксис:

List.sort(key=…, reverse=…)

Функцията за сортиране има два незадължителни параметъра, а именно:

  • Ключ: - Използва се за сортиране на функция въз основа на критерий за сортиране.
  • Reverse: – приема стойността като true или false. Ако е true, тази персонализирана функция сортира списъка в низходящ ред.

Сортиране на списък във възходящ ред с помощта на метода Sort in Python

In Python, функцията за сортиране по подразбиране сортира всеки списък във възходящ ред. Списък във възходящ ред има най-ниската стойност от лявата страна, а най-високата стойност идва от дясната страна.

Пример:

Python код:

base_list=["Google","Reliance","Guru99","Content","Syntax"]
base_list.sort()
print("the base list after sorting is",base_list)

Изход:

the base list after sorting is ['Content', 'Google', 'Guru99', 'Reliance', 'Syntax']

Code Обяснение:

  • Горният списък е произволно дефиниран списък с низове.
  • Функцията за сортиране на Python помага при сортирането на произволния списък във възходящ ред, с най-малката дължина на думата от лявата страна и най-голямата дължина на думата от дясната страна.

Сортиране на списък в низходящ ред

Функцията за сортиране също позволява списъкът да бъде сортиран в низходящ ред. Може да се определи като ред където списъкът започва с най-високата стойност и завършва с най-ниската стойност.

Обратният параметър на функцията за сортиране се присвоява като true, за да се получи списък, сортиран в низходящ ред.

Нека разгледаме примера по-долу:

Python код:

base_list=[100,600,400,8000,50]
base_list.sort()
print("the base list after sorting is",base_list)
# Reverse Order
base_list.sort(reverse=True)
print("the base list after REVERSE sorting is",base_list)

Изход:

the base list after sorting is [50, 100, 400, 600, 8000]
the base list after REVERSE sorting is [8000, 600, 400, 100, 50]

Забележка: Уверете се, че присвояването на думата „True“ на обратния параметър започва с главна буква „T“, за да избегнете всякакви грешки по време на изпълнение.

Сортиране на списък от кортежи с помощта на метода Sort in Python

Python Кортежи са колекции от неизменни елементи, които следват подредена последователност. PythonФункцията за сортиране може да се използва за сортиране на списък от кортежи с помощта на персонализирана функция и ламбда израз.

Персонализирана функция може да бъде създадена без име и представена чрез ламбда израз. Следва синтаксисът за ламбда израз:

Синтаксис:

Lambda arguments: expression

Синтаксисът по-горе е еквивалентен на кода на Python по-долу:

def name (arguments):
return expression

Ето пример за кортеж и персонализирана функция, който илюстрира как функция за сортиране с ключови параметри помага за сортирането на елементите в кортеж:

Python код:

base_list = [('Alto', 2020, 500),('MSFT', 2022, 300),('Guru99', 2019, 1070)]
def get_key(base_list):
    return base_list[2]
base_list.sort(key=get_key,reverse=True)
print("The change in base list is as follows",base_list)

Изход:

The change in the base list is as follows [('Guru99', 2019, 1070), ('Alto', 2020, 500), ('MSFT', 2022, 300)]

Code Обяснение:

  • Обратният параметър е дефиниран като true за сортиране на кортежа в низходящ ред.
  • Персонализираната функция приема втория елемент от кортежа.
  • Това се използва като ключ на функцията за сортиране.

Нека разгледаме примера по-долу, който използва ламбда израз:

Python код:

base_list = [('Alto', 2020, 500),
('MSFT', 2022, 300),
('Guru99', 2019, 1070)]
base_list.sort(key=lambda base_list:base_list[2],reverse=True)
print("The change in base list is as follows",base_list)

Изход:

The change in the base list is as follows [('Guru99', 2019, 1070), ('Alto', 2020, 500), ('MSFT', 2022, 300)]

Обяснение:

  • Ламбда изразът ви помага да сортирате елементите на кортежа от високо към ниско с ключа като втори елемент на кортежа.
  • Програмата ще провери най-високата стойност на втория елемент от кортежа.

Сортиране на елементи от списък с помощта на Len като ключов параметър

Len е вградена функция, която определя дължината на елемента. Определената дължина може да се използва за индексиране във функцията за сортиране. За да направим това, присвояваме Len на Python ключовият параметър на функцията за сортиране.

По-долу Python кодът илюстрира как да използвате функцията Len с функцията за сортиране.

Python Code:

base_list=["Alto", "Guru99", "Python", "Google", "Java"]
base_list.sort(key=len)
print("The sorted list based on length:",base_list)

Изход:

The sorted list based on length: ['Alto', 'Java', 'Guru99', 'Python', 'Google']

Code Обяснение:

Сортиране на елементи от списък с помощта на Len

  • Дължината на елемента става индекс за ключовия параметър за подреждане на списъка във възходящ ред.
  • Функцията Len оценява дължината на всеки елемент, присъстващ в основния списък.
  • Той запазва най-късия елемент от лявата страна и най-големия елемент от дясната страна.
  • Тук думите alto и java имат дължина 4, които са подредени първи в списъка, следвани от Guru99, който е с дължина 6.

Този пример илюстрира концепцията на параметъра reverse във функцията за сортиране, както е показано по-долу:

Python Code:

base_list=["Alto", "Guru99", "Python", "Google", "Java"]
base_list.sort(key=len,reverse=True)
print("The sorted list based on length:",base_list)

Изход:

The sorted list based on length: ['Guru99', 'Python', 'Google', 'Alto', 'Java']

Сортиране на елементи от списък с помощта на дефинирана от потребителя функция като ключов параметър

Можете също да използвате потребителски дефинирана функция като ключов параметър за сортиране на списък. Ето един пример:

Python Code:

base_list = [{'Example':'Python','year':1991},{'Example':'Alto','year':2014},{'Example':'Guru99', 'year':1995},
{'Example':'Google','year':1985},{'Example':'Apple','year':2007},{'Example':'Emails','year':2010},]
def get_year(element):
    return element['year']
base_list.sort(key=get_year)
print("The base list after sorting using explicit criteria",base_list)

Изход:

The base list after sorting using explicit criteria [{'Example': 'Google', 'year': 1985}, {'Example': 'Python', 'year': 1991}, {'Example': 'Guru99', 'year': 1995}, {'Example': 'Apple', 'year': 2007}, {'Example': 'Emails', 'year': 2010}, {'Example': 'Alto', 'year': 2014}]

Code Обяснение:

  • Създава се дефинирана от потребителя функция за връщане на годината
  • Ключовият параметър приема дефинирана от потребителя функция като критерий.
  • Функцията за сортиране ще подреди списъка във възходящ ред въз основа на стойността на елемента „година“.

Разлика между метода за сортиране и сортирания метод в Python

След като разгледаме горните примери, е полезно да сравним директно двата инструмента за сортиране. Преди да обобщим разликите, нека разберем синтаксиса на метода Sorted.

Python Синтаксис:

sorted (list_name, reverse=…., key=..)

Code Обяснение:

  • Сортираната функция сортира списъка във възходящ или низходящ ред.
  • Функцията приема три параметъра, от които два параметъра са от незадължителен тип и един параметър е от задължителен тип.
  • Параметър list_name се изисква при използване на метода Sorted.
  • Методът Sorted може да приеме всеки тип итерируем списък като вход.
  • Ключовите параметри и обратните параметри са незадължителни параметри под сортирания метод в Python.

Ето пример за използване на функцията сортиране и сортиране в Python:

Python код:

#Use of the Sorted method
Base_list=[11,10,9,8,7,6]
print("the original list is",Base_list)
New_list=sorted(Base_list)
print("the New list using sorted method is",New_list)
#Use of the Sort method
Base_list=[11,10,9,8,7,6]
print("the original list is",Base_list)
New_list=Base_list.sort()
print("the New list using sort method is",New_list)

Изход:

the original list is [11, 10, 9, 8, 7, 6]
the new list using the sorted method is [6, 7, 8, 9, 10, 11]
the original list is [11, 10, 9, 8, 7, 6]
the new list using the sort method is None

Code Обяснение:

  • Оригиналният списък се предава като задължителен параметър за сортираната функция.
  • Методът Sorted връща нов списък освен оригиналния списък.
  • Тъй като към сортирания метод не се предават допълнителни параметри, новият списък по подразбиране е сортиран във възходящ ред.
  • Функцията за сортиране не създава нов списък.

Следните точки са свързани с ключовите прилики и разлики:

Сортирана функция Функция за сортиране
Сортирана функция в Python е вградена функция, която приема list_name като задължителен параметър. Функцията за сортиране не приема оригиналния списък като параметър.
Сортираният метод връща нов списък Функцията за сортиране не връща нов списък
Сортираната функция трябва да се използва за итерируеми списъци Функцията за сортиране трябва да се използва за неитерируеми списъци.
Той не променя оригиналния списък и ни позволява да запазим оригиналните данни. Функцията за сортиране променя оригиналната функция и следователно заема по-малко място в паметта

Кога да използваме метода на сортиране или метода на сортиране?

Нека вземем пример, който изисква данните за расата да бъдат сортирани. Програмата използва номера на бита и времето, необходимо в секунди, за да завърши състезанието.

Python код:

from collections import namedtuple
Base = namedtuple('Runner', 'bibnumber duration')
blist = []
blist.append(Base('8567', 1500))
blist.append(Base('5234', 1420))
blist.append(Base('2344', 1600))
blist.append(Base('2342', 1490))
blist.append(Base('23444', 1620))
blist.append(Base('6674', 1906))
print("original list",blist)
blist.sort(key=lambda x: getattr(x, 'duration'))
top_five_result = blist[:5]
print("Results using sort function",top_five_result)
r_blist=sorted(blist,key=lambda x: getattr(x, 'duration'))
top_five_result = r_blist[:5]
print("Results using sorted function",top_five_result)

Изход:

original list [Runner(bibnumber='8567', duration=1500), Runner(bibnumber='5234', duration=1420), Runner(bibnumber='2344', duration=1600), Runner(bibnumber='2342', duration=1490), Runner(bibnumber='23444', duration=1620), Runner(bibnumber='6674', duration=1906)]

Results using sort function [Runner(bibnumber='5234', duration=1420), Runner(bibnumber='2342', duration=1490), Runner(bibnumber='8567', duration=1500), Runner(bibnumber='2344', duration=1600), Runner(bibnumber='23444', duration=1620)]

Results using sorted function [Runner(bibnumber='5234', duration=1420), Runner(bibnumber='2342', duration=1490), Runner(bibnumber='8567', duration=1500), Runner(bibnumber='2344', duration=1600), Runner(bibnumber='23444', duration=1620)]

Code Обяснение:

  • Базовият списък се сортира както с помощта на функцията за сортиране, така и с функцията за сортиране.
  • Базовият списък се губи, когато се приложи функцията за сортиране.
  • Функцията за сортиране не трябва да се прилага към оригиналния набор от данни. Трябва да се използва, когато има копие на оригиналния набор от данни.
  • Функцията Сортирани запазва оригиналния списък. Не го отменя.
  • Това предлага по-добро tracлеснота и ефективно управление на данните.

Въпроси и Отговори

Предайте key=str.lower на метода sort(), например names.sort(key=str.lower). Всеки низ се сравнява с малки букви, така че „Apple“ и „banana“ се подреждат по азбучен ред, независимо от главните букви. Оригиналният регистър на буквите на всеки елемент се запазва в крайния сортиран списък.

Сортирането на списък от всички числа или всички низове работи, но смесването на несвързани типове, като цели числа и низове, поражда TypeError, защото Python не могат да бъдат сравнявани. Първо преобразувайте стойностите в един сравним тип или подайте ключова функция, която връща сравними ключове.

Python исторически използван Timsort, хибрид между сортиране чрез сливане и сортиране чрез вмъкване. От версия 3.11 интерпретаторът използва Powersort, вариант, производен на Timsort, с по-интелигентна политика за сливане. И двата са стабилни и се изпълняват за време O(n log n) в най-лошия случай.

Да. Методът sort() е стабилен, така че елементите, които сравняват равни, запазват първоначалния си относителен ред. Това ви позволява да сортирате по няколко критерия на етапи, като сортирате първо по най-маловажния ключ и после по най-важния.

Методът sort() се изпълнява за време O(n log n) в най-лошите и средните случаи. При данни, които вече са предимно подредени, той се приближава до O(n), защото основният алгоритъм открива и използва повторно съществуващи сортирани изпълнения, вместо да ги сортира отново.

Предайте ключ, който преобразува всеки елемент по време на сравнението, например nums.sort(key=int). След това списъкът се подрежда по числова стойност, а не по символ, така че '10' правилно сортира след '9'. Запазените елементи остават като низове; само сравнението използва тяхната целочислена стойност.

Сортирането подрежда прогнозите по резултат или вероятност, избира top-k резултати в системите за класиране и препоръки и подрежда записите по време на подготовката на данните. Конвейерите за машинно обучение често сортират стойностите на характеристиките или изходите на модела преди оценката, така че вграденият метод sort() е често срещана стъпка за предварителна обработка.

Да. GitHub Copilot и агентните AI асистенти генерират sort() и sorted() извиквания, включително ключови функции и ламбда изрази, от кратък коментар. Те могат да рефакторират цикли в единични оператори за сортиране, въпреки че все пак трябва да тествате подреждането и да потвърдите резултата в гранични случаи.

Обобщете тази публикация с: