Jak třídit seznamy v Pythonu

How Sort Lists Python



Tento článek se bude zabývat příručkou o řazení seznamů v Pythonu. Objekt seznamu v Pythonu je kolekce jedné nebo více položek oddělených čárkami. Jedná se o iterovatelný objekt a k jeho prvkům lze přistupovat iterací seznamu pomocí příkazů smyčky a dalších výrazů. Seznam Pythonu můžete řadit pomocí třídicích a seřazených metod, oba jsou vysvětleny v článku. Všechny ukázky kódu v tomto článku jsou testovány pomocí Pythonu 3.9.5 v Ubuntu 21.04.

Metoda řazení

Metoda řazení třídí seznam na místě. Jinými slovy, upraví objekt seznamu, který se chystáte řadit, a změní jeho pořadí. Pokud nepožadujete původní seznam a nevadí vám, že seznam mění své pořadí prvků na místě, je to nejúčinnější metoda v Pythonu pro seřazení seznamu. Zvažte tento příklad:







the= [2, 8, 6, 4]

.třídit()

tisk (the)

Po spuštění výše uvedené ukázky kódu byste měli získat následující výstup: After running the above code sample, you should get the following output:



[2, 4, 6, 8]

První příkaz v ukázce kódu definuje seznam. Dále je v seznamu vyvolána metoda řazení. Když si seznam vytisknete, uvidíte, že pořadí původního seznamu bylo změněno.



Ve výchozím nastavení Python seřadí seznam ve vzestupném pořadí. Pokud chcete seznam seřadit sestupně, použijte reverzní metodu, jak je ukázáno v ukázce kódu níže:





the= [2, 8, 6, 4]

.třídit()

.zvrátit()

tisk (the)

Po spuštění výše uvedené ukázky kódu byste měli získat následující výstup: After running the above code sample, you should get the following output:

[8, 6, 4, 2]

Reverzní metoda také změní seznam Pythonu na místě bez vytvoření nového seznamu.



Pokud váš seznam obsahuje prvky řetězce, vyvoláním metody řazení v něm seřadí podle abecedy, kde jsou nejprve seřazeny symboly a čísla. Podívejte se na ukázku kódu níže:

the= ['s', 'na', 'S', '4', '#']

.třídit()
tisk (the)

Po spuštění výše uvedené ukázky kódu byste měli získat následující výstup: After running the above code sample, you should get the following output:

['#', '4', 'na', 's', 'S']

Můžete také použít reverzní metodu v seznamu obsahujícím řetězcové prvky.

the= ['s', 'na', 'S', '4', '#']

.třídit()

.zvrátit()

tisk (the)

Po spuštění výše uvedené ukázky kódu byste měli získat následující výstup: After running the above code sample, you should get the following output:

['S', 's', 'na', '4', '#']

Tříděná metoda

Tříděná metoda také třídí seznam Pythonu, stejným způsobem jako metoda řazení. Místo úpravy původního seznamu však vrátí nový seznam, takže váš původní seznam zůstane nedotčen v případě, že jej budete chtít znovu použít. Zvažte níže uvedený kód:

seznam 1= ['s', 'na', 'S', '4', '#']

seznam 2= tříděno(seznam 1)

tisk (seznam 1,seznam 2)

Po spuštění výše uvedené ukázky kódu byste měli získat následující výstup: After running the above code sample, you should get the following output:

['s', 'na', 'S', '4', '#'] ['#', '4', 'na', 's', 'S']

Na výstupu můžete vidět, že list1 je neporušený a list2 má nyní seřazené prvky. Můžete také použít reverzní metodu na list2 pro změnu její metodiky řazení.

Reverzní argument

K získání seřazeného seznamu v sestupném pořadí můžete použít argument obrácení jako alternativu k reverzní funkci v metodách řazení i řazení. Chcete -li změnit pořadí třídění, zadejte skutečnou hodnotu:

seznam 1= ['s', 'na', 'S', '4', '#']

seznam 2= tříděno(seznam 1,zvrátit=Skutečný)

tisk (seznam 1,seznam 2)

Po spuštění výše uvedené ukázky kódu byste měli získat následující výstup: After running the above code sample, you should get the following output:

['s', 'na', 'S', '4', '#'] ['S', 's', 'na', '4', '#']

Použití klíčové funkce k určení vlastní logiky pro třídění prvků seznamu

V metodách řazení i seřazení můžete zadat další klíčový argument, který jako hodnotu převezme volatelnou funkci. Tomuto klíčovému argumentu lze přiřadit existující funkci z integrovaných modulů Pythonu nebo můžete vlastní funkci dodat vlastní logikou. Podívejte se na ukázku kódu níže:

seznam 1= ['abcde', 'xyz', 'ijkl']

seznam 2= tříděno(seznam 1,klíč=jen)

tisk (seznam 1,seznam 2)

seznam 1.třídit(klíč=jen)

tisk (seznam 1)

Po spuštění výše uvedené ukázky kódu byste měli získat následující výstup: After running the above code sample, you should get the following output:

['abcde', 'xyz', 'ijkl'] ['xyz', 'ijkl', 'abcde']

['xyz', 'ijkl', 'abcde']

Ukázka kódu ukazuje použití argumentu klíče v tříděných i třídicích metodách. Funkce, která je mu dodávána, se nazývá len, která určuje délku řetězcového objektu nebo iterovatelný. Funkce nebo volatelný by měl původně mít pouze jeden argument. Přiřadíte jej ke klíčovému argumentu bez použití závorek. Volatelná funkce zadaná do argumentu klíče je volána pro každý prvek seznamu. Hodnoty vrácené z této metody s možností volání jsou poté použity jako klíč pro řazení seznamu. Zásobování funkce len klíčovému argumentu tedy třídí prvky seznamu v pořadí podle jejich délky, tj. Od nejkratšího po nejdelší. Jak již bylo uvedeno dříve, metodiku obrácení můžete kdykoli obrátit metodou obrácení.

Můžete také použít vlastní funkci nebo lambda funkce s jedním řádkem, které vracejí hodnotu jednoho výrazu. Podívejte se na ukázku kódu níže, kde seznam obsahuje n -tice aktuálního inventáře beden s ovocem:

seznam 1= [('mango', 99), ('oranžový', 51), ('banán', 76)]

seznam 1.třídit(klíč=lambdainventář: inventář[1])

tisk (seznam 1)

Po spuštění výše uvedené ukázky kódu byste měli získat následující výstup: After running the above code sample, you should get the following output:

[('oranžový', 51), ('banán', 76), ('mango', 99)]

Funkce lambda je dodávána s inventářem argumentů, což je každý prvek seznamu ve formě řazené kolekce členů. Potom vrátí druhý prvek každé řazené kolekce členů jako klíč (v indexu 1). Funkce řazení pak seřadí všechny řazené kolekce členů podle druhého prvku ve vzestupném pořadí. K obrácení pořadí řazení můžete také použít funkci obrácení nebo argument obrácení.

Závěr

Toto je několik způsobů, pomocí kterých můžete třídit obsah iterovatelného seznamu v Pythonu. Klíčový argument vám umožňuje napsat vlastní logiku řazení, vhodnou pro aplikace, které mohou mít jiné potřeby než vestavěné metody řazení.