Разумевање сортиране функције у Питхон-у: Једноставан водич

Једна од великих предности коришћења Питхон-а је његова једноставност. Лако је радити са њим јер његова стандардна библиотека има много корисних функција. Једна таква функција је сортирана функција.

Ова функција се користи за сортирање итерабле по неком редоследу. Без такве функције, мора се написати код који имплементира алгоритам за сортирање као што је Буббле Сорт или Инсертион Сорт. Ово је често тешко, али Питхон пружа једноставнији начин, који ћемо покрити у овом чланку.

Увод у сортирану функцију

Сортирана функција је функција која сортира итерабле у Питхон-у. Итерабле је свака вредност коју можете да пређете у петљу. Примери итерабле укључују низове, листе, тупле и скупове. Ови итерабле су често неуређени, а сортирање поставља њихове вредности одређеним редоследом. Наручивање вредности је корисно јер:

  • Претраживање са вредностима је брже и ефикасније коришћењем алгоритама као што је Бинарна претрага. Међутим, бинарна претрага захтева да се вредности прво сортирају.
  • За приказ вредности. Понекад би корисници желели да виде информације сортиране, на пример, прво најнижа цена или најновија објава. Ово би захтевало имплементацију неког начина сортирања листе вредности.
  • Када се врши статистичка анализа, на пример, проналажење вредности која се најчешће појављује у скупу. Лакше је то урадити када се вредности сортирају по реду.

Водич за коришћење сортираних функција

Као што је раније поменуто, сортирана функција ради са свим итерабле. Заузврат, враћа листу која је сортирана. Ово је важно напоменути – док унос може бити било који итерабле, повратна вредност увек мора бити листа.

Синтакса сортиране функције

Потпис функције сортиране функције је следећи:

sorted(iterable, key=None, reverse=False)

Као што видите, једини потребан аргумент је итерабле, који ће бити сортиран.

  Како снимити свој екран помоћу Мицрософт ПоверПоинт-а

Следећи аргумент је кључан. Кључ је функција која ће се користити за трансформацију сваког елемента у итерабле да би се добила вредност која ће се користити за сортирање. Ово ће бити корисно за сортирање листе речника, као што ћете видети касније. Подразумевана вредност је ништа, тако да неће применити ниједну функцију осим ако није наведена.

Последњи аргумент је обрнути аргумент. Када је постављено на тачно, ставке ће бити сортиране обрнутим редоследом.

У следећем одељку користићу примере да покажем како се користи функција.

Примери употребе сортираних функција

Листа бројева

Најједноставнији случај сортирања вредности је сортирање листе бројева. Размотрите следећи пример кода:

# A list of unsorted values
numbers = [8, 4, 3, 9, 2, 0, 3]

# Sorting the numbers
sorted_numbers = sorted(numbers)

# Outputting the sorted values
print(sorted_numbers)

Излаз би био:

[0, 2, 3, 3, 4, 8, 9]

Као што видите, вредности су сортиране у растућем редоследу. Поставили бисте реверсе на труе ако желите да их сортирате у опадајућем редоследу. Стога би ред 4 у претходном примеру кода био:

sorted_numbers = sorted(numbers, reverse=True)

Резултат покретања модификованог програма би био:

[9, 8, 4, 3, 3, 2, 0]

Листа стрингова

Сортирана функција подржава више од само бројева. Такође можете сортирати низове. Да бисте сортирали низове на листи, упоређују се први знакови стрингова. Поређења се врше на АСЦИИ вредностима знакова. На пример, „здраво“ би било испред речи „свет“ јер је АСЦИИ вредност „х“ 104, мања од АСЦИИ вредности „в“, 119.

Ако један или више стрингова имају исти први знак, њихов други и наредни карактер се пореде док се не пронађе неки редослед. Ево примера кода где сортирамо имена људи.

# Creating a list of names
members_list = ['bob', 'dave', 'charlie', 'alice']

# Sorting the names
sorted_members_list = sorted(members_list)

# Printing the names
print(sorted_members_list)

Ово ће произвести следећи излаз:

['alice', 'bob', 'charlie', 'dave']

Пошто се користе АСЦИИ вредности, редослед стрингова зависи од тога који знак је први у АСЦИИ табели. На пример, велико слово би долазило пре малог јер се велики знакови налазе испред малих слова у АСЦИИ-у. Ево комплетне АСЦИИ табеле за вашу референцу:

  Шта се дешава ако одјавите свој Фирестицк?

Извор: цоммонс.викимедиа.орг

Други итерабле – низови, тупле и скупови

Као што сам поменуо, сортирана функција ради са свим врстама итерабле. Иста правила важе за то како ће вредности у итераблеима бити сортиране. Ево примера:

# Printing a sorted string
print(sorted("dijkstra"))

# Printing a sorted tuple of values
print(sorted((3, 4, 2, 1, 5, 0)))

# Printing a sorted set of values
print(sorted(set([4, 5, 5, 1, 3, 8, 9])))

Резултат овога ће бити:

['a', 'd', 'i', 'j', 'k', 'r', 's', 't']
[0, 1, 2, 3, 4, 5]
[1, 3, 4, 5, 8, 9]

Као што видите, излаз у сваком случају је листа.

Списак речника

Такође можете применити сортирану функцију да сортирате листу речника. Међутим, сортирање речника је мало компликованије. То је зато што, за разлику од бројева или низова, речник има више својстава, од којих је свако подједнако валидно за поређење.

Дакле, да бисте сортирали речнике, наведете функцију која ће сумирати цео речник на једну вредност која ће се користити за поређење. Ова функција ће бити прослеђена сортираној функцији као кључни аргумент. Ево примера за илустрацију:

people = [
        { 'name': 'Alice', 'age': 27 },
        { 'name': 'Bob', 'age':  23 },
        { 'name': 'Charlie', 'age': 25}
]

people_sorted_by_age = sorted(people, key=lambda person: person['age'])
print(people_sorted_by_age)

У овом примеру имамо три особе представљене објектом речника. Сваки објекат има име и атрибут старости. Желимо да сортирамо људе по годинама. Према томе, када позовемо сортирану функцију, функцију прослеђујемо као кључни аргумент.

Ова функција ће узети објекат речника особе и вратити старост особе. Повратна вредност овог кључа ће се користити за сортирање. Због тога је цео речник сажет у једноставан цео број који се може поредити. Ради једноставности, користио сам ламбда функцију да дефинишем кључни аргумент.

  ГНОМЕ 45 уводи нове апликације за прегледач слика и камере: ево како функционишу

Покретање кода ће произвести следећи излаз:

[{'name': 'Bob', 'age': 23}, {'name': 'Charlie', 'age': 25}, {'name': 'Alice', 'age': 27}]

Случај употребе кључног аргумента

Кључни аргумент не мора да се користи само при сортирању речника. Можете га користити за све вредности. Његова употреба је да обезбеди кључ који се може користити за сортирање вредности. Ево примера случајева употребе:

  • Сортирање вредности кроз дефинисање кључне функције која узима вредност и враћа дужину вредности.
  • Сортирање низова на листи на начин без обзира на велика и мала слова. Да бисте то урадили, сваки стринг на листи се може конвертовати у мала слова. Ово се може постићи дефинисањем функције кључа која узима вредност кључа стринга и враћа верзију стринга малим словима.
  • Сортирање вредности на основу сложене вредности која комбинује вредности других уноса.

Извршна сложеност сортиране функције

Сортирана функција има сложеност времена извршавања од О(н лог н), где је н број елемената у инпуту итерабле. Ова сложеност настаје зато што функција користи Тимсорт алгоритам, који је хибридни алгоритам за сортирање заснован на сортирању спајањем и сортирању уметањем.

Просторна сложеност функције је О(н), где је н још увек број елемената у улазу. То је зато што се креира и враћа нова листа.

Сортирана функција наспрам функције сортирања

Друга опција за сортирање вредности је функција сортирања. Овај одељак ће објаснити кључне разлике између сортираних и сортираних функција.

  • Функција сортирања модификује итерабле на месту, док сортирана функција креира нову листу и враћа је.
  • Пошто се модификације врше на месту, сортирање захтева да унос буде листа. С друге стране, сортед може узети било који итерабле као улаз који ће се затим користити за креирање нове листе која ће бити модификована и враћена.

Завршне речи

У овом чланку смо покрили сортирану функцију – шта је то, како је користити и различите аргументе које узима. Такође смо покрили различите примере коришћења функције и њену сложеност током извршавања и упоредили је са функцијом сортирања.

Затим ћете можда желети да прочитате наш чланак о Питхоновој функцији сума.