Tento článek vás naučí, jak třídit seznam v Pythonu.
V Pythonu můžete pomocí metody sort() seřadit seznam na místě. Nebo můžete použít vestavěnou funkci sort() k získání setříděné kopie seznamu.
V tomto tutoriálu se naučíte:
- Syntaxe metody sort() a funkce sort()
- Příklady kódu řazení seznamů ve vzestupném a sestupném pořadí
- Přizpůsobte řazení pomocí parametru key
- Rozdíl mezi sort() a sort()
Začínáme!👩🏽💻
Table of Contents
Syntaxe metody sort() Pythonu
Metoda sort() funguje se seznamem Pythonu. A seřadí seznam na místě – a upraví původní seznam.
Syntaxe metody sort() Pythonu je:
<list>.sort(reverse = True | False, key = <func>)
Pojďme nyní analyzovat výše uvedenou syntaxi.
- je jakýkoli platný objekt seznamu Pythonu.
- reverse je volitelný parametr, který má hodnotu True nebo False.
- Výchozí hodnota obrácená je False a seznam je řazen vzestupně. Chcete-li seznam seřadit v sestupném pořadí, zadejte hodnotu True.
- key je také volitelný parametr, který je nastaven na
. může být vestavěná funkce nebo uživatelsky definovaná funkce.
V další části začnete kódovat jednoduché příklady.
Jak seřadit seznam Python ve vzestupném pořadí
Zvažte seznam č. Chcete-li seznam seřadit vzestupně, můžete v seznamu zavolat metodu sort().
▶ Spusťte následující fragment kódu.
nums = [25,13,6,17,9] nums.sort() print(nums) # Output: [6, 9, 13, 17, 25]
Čísla seznamu byla seřazena vzestupně a původní seznam byl upraven. Tomu se říká třídění na místě.
Jak seřadit seznam Python v sestupném pořadí
Chcete-li seznam seřadit v sestupném pořadí, nastavte zpětný chod na True, jak je znázorněno níže.
nums = [25,13,6,17,9] nums.sort(reverse = True) print(nums) # Output: [25, 17, 13, 9, 6]
Můžete vidět, že seznam je nyní řazen sestupně.
Jak používat klíč s metodou sort() Pythonu
V této sekci použijeme klíčový parametr a přizpůsobíme řazení.
Zde je mod5() funkce, která přijímá číslo x a vrací zbytek, když je číslo x děleno 5.
def mod5(x): return x % 5
A jako klíč bychom rádi použili výše uvedenou funkci.
Nyní spusťte následující buňku kódu.
nums = [25,13,6,17,9] nums.sort(key = mod5) print(nums) # Output: [25, 6, 17, 13, 9]
Věnujte minutu analýze výstupu.
Všimněte si, jak místo běžného třídění nyní přizpůsobujete třídění podle klíče, kterým je mod5.
- Číslo, které po vydělení 5 ponechává minimální zbytek, je nyní na prvním místě.
- A číslo, které po vydělení 5 ponechává největší zbytek, je posledním prvkem v seřazeném seznamu.
Chcete-li ověřit, zda se jedná o tento případ, spusťte následující fragment kódu.
nums = [25,13,6,17,9] for num in nums: print(f"{num} leaves remainder {num%5} when divided by 5") # Output 25 leaves remainder 0 when divided by 5 13 leaves remainder 3 when divided by 5 6 leaves remainder 1 when divided by 5 17 leaves remainder 2 when divided by 5 9 leaves remainder 4 when divided by 5
5 dělí 25 přesně a zbytek je 0. Takže to je první prvek v seřazeném seznamu. 6 ponechává zbytek 1, takže je to druhý prvek a tak dále. 9 ponechá zbytek 4, když je děleno 5, a je to poslední prvek v seřazeném seznamu.
Místo definování samostatné funkce můžete také použít funkce lambda. V Pythonu jsou lambdy jednořádkové anonymní funkce. lambda args : výraz vrací výraz vypočítaný na args.
Nyní přepišme výše uvedené řazení pomocí výrazu lambda, jak je uvedeno níže.
nums = [25,13,6,17,9] nums.sort(key = lambda x:x%5) print(nums) # Output: [25, 6, 17, 13, 9]
Zatím jste se naučili třídit seznam čísel. Dále se podíváme, jak můžete seřadit seznam řetězců v Pythonu.
Jak seřadit seznam Python v abecedním pořadí
V této části se naučíte třídit seznam řetězců – s příklady inspirovanými Harrym Potterem. ✨
V našem příkladu studenti představují seznam studentů v Bradavicích. A rádi bychom je seřadili v abecedním pořadí jejich jmen.
Při řazení seznamu řetězců je výchozí řazení v abecedním pořadí.
students = ["Harry","Ron","Hermione","Draco","Cedric"]
Vytiskneme si seřazený seznam, abychom si ověřili výsledek řazení.
students.sort() print(students) # Output ['Cedric','Draco', 'Harry', 'Hermione', 'Ron']
Jak seřadit seznam Python v obráceném abecedním pořadí
Chcete-li seznam seřadit v obráceném abecedním pořadí, nastavte reverse = True, jak je znázorněno ve fragmentu kódu níže.
students.sort(reverse = True) print(students) # Output ['Ron', 'Hermione', 'Harry', 'Draco', 'Cedric']
Z výstupu můžete vidět, že seznam byl skutečně seřazen v obráceném pořadí.
Jak používat klíč Parametr Přizpůsobit Řazení
V této části upravíme řazení pomocí volitelného parametru klíče.
Zvažte následující seznam, domy.
houses = [ {1:"Draco","house":"Slytherin"}, {2:"Harry","house":"Gryffindor"}, {3:"Cedric","house":"Hufflepuff"} ]
Zde, domy je seznam slovníků. Každý slovník obsahuje dva páry klíč-hodnota, jeden označuje jména studentů a druhý dům, ke kterému patří.
Nyní bychom chtěli seřadit tento seznam domů v abecedním pořadí domů, do kterých patří.
Jak už asi tušíte, měli bychom nastavit klíčový parametr na dům konkrétních studentů.
Chcete-li získat dům každého studenta, můžete definovat funkci returnHouse(), jak je uvedeno níže.
def returnHouse(student): return student['house']
Tato funkce vrací dům, ke kterému konkrétní student patří.
Nyní můžete zavolat metodu sort() v seznamu domů, jak je znázorněno.
houses.sort(key=returnHouse)
Ve výstupu níže si všimněte, jak je seznam seřazen podle domu a nikoli podle jmen studentů. Proto máme Nebelvír, Mrzimor a Zmijozel – v abecedním pořadí.
print(houses) # Output [{2: 'Harry', 'house': 'Gryffindor'}, {3: 'Cedric', 'house': 'Hufflepuff'}, {1: 'Draco', 'house': 'Slytherin'}]
Chcete-li odpovídajícím způsobem definovat klíčový parametr, můžete také použít funkci lambda. Pro každou položku seznamu tato funkce vrací dům pro tuto položku seznamu.
▶ Ověřte to spuštěním následující buňky s kódem.
houses.sort(key=lambda student:student["house"]) print(houses) # Output [{2: 'Harry', 'house': 'Gryffindor'}, {3: 'Cedric', 'house': 'Hufflepuff'}, {1: 'Draco', 'house': 'Slytherin'}]
Ve všech dosavadních příkladech jste na seznamu použili metodu sort(). A nyní víte, že upravuje původní seznam.
Co když chcete zachovat původní seznam tak, jak je, ale získat seřazenou kopii seznamu?
V Pythonu k tomu můžete použít funkci sort() .
Syntaxe funkce sort() v Pythonu
Funkce sort() bere jako argument seznam nebo jakoukoli kolekci. A vrátí setříděnou kopii seznamu – a původní seznam se nezmění.
Syntaxe funkce sort() Pythonu je:
<sorted_copy> = sorted(<list>, reverse = True | False, key = <func>)
Všimněte si, jak je syntaxe velmi podobná metodě sort(), kterou jsme viděli dříve.
- je jakýkoli platný objekt seznamu Python a je povinným parametrem.
- zpětný chod a klíč jsou volitelné parametry
Poznámka: Na rozdíl od metody sort(), která působí pouze na seznamy, lze funkci sort() použít k řazení libovolné iterovatelné Pythonu, jako jsou seznamy, řetězce a slovníky.
Jak seřadit seznam Pythonu pomocí funkce sort()
#1. V tomto příkladu je nums seznam čísel.
Funkci sort() můžete zavolat s argumentem nums. A přiřaďte jej k seznamu sorted_nums1.
nums = [25,13,6,17,9] sorted_nums1 = sorted(nums) print(sorted_nums1) # Output: [6, 9, 13, 17, 25]
Ve výše uvedeném výstupu můžete vidět, že hodnoty num byly ve výchozím nastavení seřazeny vzestupně.
Všimněte si také, že původní seznam nums není upraven – protože sort() vrací nový seznam. To je ověřeno níže.
print(nums) # Output: [25, 13, 6, 17, 9]
#2. Nyní nastavte volitelný parametr reverse na True a získejte sorted_nums2.
Jak je uvedeno v buňce kódu níže, sorted_nums2 je nový seznam s položkami seřazenými v sestupném pořadí.
sorted_nums2 = sorted(nums,reverse = True) print(sorted_nums2) # Output: [25, 17, 13, 9, 6]
#3. V tomto příkladu pracujme se seznamem řetězců.
Stejně jako v předchozích příkladech volání funkce sorted() vrátí nový seznam. A položky jsou seřazeny v abecedním pořadí.
fruits = ['pears','strawberry','apple','pineapple','blueberry'] sorted_fr1 = sorted(fruits) print(sorted_fr1) # Output: ['apple', 'blueberry', 'pears', 'pineapple', 'strawberry']
#4. Nyní přizpůsobíme řazení pomocí volitelného parametru klíče. Nastavte klíč na len. Tím se seznam seřadí podle délky řetězců.
Poznámka: V Pythonu vestavěná funkce len() přebírá všechny iterovatelné, jako jsou seznamy, řetězce, n-tice a tak dále. A vrátí délku iterovatelného.
Řetězec s nejkratší délkou se v seřazeném seznamu objeví jako první a nejdelší řetězec se objeví na konci seřazeného seznamu.
fruits = ['pear','strawberry','apple','pineapple','blueberry'] sorted_fr2 = sorted(fruits,key=len) print(sorted_fr2) # Output: ['pear', 'apple', 'pineapple', 'blueberry', 'strawberry']
Ve výše uvedeném výstupu je nejkratší řetězec hruška a nejdelší řetězec jahody.
Metoda sort() v Pythonu vs. funkce sort()
Zatím jste se naučili používat metodu sort() a také funkci sort() . V této části si vyjmenujme rozdíly mezi těmito dvěma metodami.
Metoda Python .sort()Python sort() Funkce Seřadí seznam na místě – upraví původní seznamVrátí nový setříděný seznamPracuje pouze s Pythonem. SeznamyPracuje s Pythonem iterables, jako jsou seznamy, řetězce a další kolekceMá návratový typ NoneVrátí seřazenou kopii iterovatelné položky
Shrnutí 👩🏫
Doufám, že vám tento návod na seznamy Pythonu byl užitečný.
Pojďme si rychle shrnout, co jsme probrali.
- Použijte list.sort(reverse = True | False, key =
) s volitelnými parametry reverse a key k seřazení seznamu na místě. - Použijte sorted(list, reverse = True | False, key =
), abyste získali seřazenou kopii seznamu.
Nyní, když jste se naučili třídit seznamy v Pythonu, přečtěte si o porozumění seznamu v Pythonu. Nebo se můžete také naučit, jak zacházet se soubory nebo pracovat se soubory JSON v Pythonu.
Můžete vyzkoušet příklady uvedené výše v etechblog.cz Online Python Compiler.