Jak třídit seznamy v Pythonu

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!👩🏽‍💻

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.

  Kdo může vidět moje běhy a jízdy na Stravě?