Python seřazen ()

Funkce seřazené () vrátí seřazený seznam z položek v iterovatelné.

sorted()Funkce třídí prvky dané iterable v určitém pořadí (a to buď vzestupně nebo sestupně ) a vrátí řazeny iterable jako seznam.

Syntaxe sorted()funkce je:

 seřazeno (iterovatelné, klíč = žádné, reverzní = nepravdivé)

Parametry funkce seřazené ()

sorted() může trvat maximálně tři parametry:

  • iterovatelný - posloupnost (řetězec, n-tice, seznam) nebo kolekce (sada, slovník, zmrazená sada) nebo jakýkoli jiný iterátor.
  • reverzní (volitelně) - Pokud Trueje seřazený seznam obrácen (nebo seřazen sestupně). Výchozí nastavení, Falsepokud není k dispozici.
  • key (Volitelné) - Funkce, která slouží jako klíč pro porovnání řazení. Výchozí nastavení pro None.

Příklad 1: Řazení řetězce, seznamu a řazené kolekce členů

 # vowels list py_list = ('e', 'a', 'u', 'o', 'i') print(sorted(py_list)) # string py_string = 'Python' print(sorted(py_string)) # vowels tuple py_tuple = ('e', 'a', 'u', 'o', 'i') print(sorted(py_tuple))

Výstup

 ('a', 'e', ​​'i', 'o', 'u') ('P', 'h', 'n', 'o', 't', 'y') ('a' , 'e', ​​'i', 'o', 'u')

Všimněte si, že ve všech případech je vrácen seřazený seznam.

Poznámka: Seznam má také metodu sort (), která funguje stejným způsobem jako sorted(). Jediným rozdílem je, že sort()metoda nevrací žádnou hodnotu a změní původní seznam.

Příklad 2: Seřadit sestupně

sorted()Funkce přijímá reverseparametr jako volitelného argumentu.

Nastavení reverse = Trueseřadí iterovatelnou sestupně.

 # set py_set = ('e', 'a', 'u', 'o', 'i') print(sorted(py_set, reverse=True)) # dictionary py_dict = ('e': 1, 'a': 2, 'u': 3, 'o': 4, 'i': 5) print(sorted(py_dict, reverse=True)) # frozen set frozen_set = frozenset(('e', 'a', 'u', 'o', 'i')) print(sorted(frozen_set, reverse=True))

Výstup

 ('u', 'o', 'i', 'e', ​​'a') ('u', 'o', 'i', 'e', ​​'a') ('u', 'o' , 'i', 'e', ​​'a')

klíčový parametr ve funkci Python seřazeno ()

Pokud chcete vlastní implementaci pro třídění, sorted()přijímá také keyfunkci jako volitelný parametr.

Na základě vrácené hodnoty klíčové funkce můžete setřídit danou iterovatelnost.

 tříděno (iterovatelné, klíč = len)

Zde len()je zabudovaná funkce Pythonu pro počítání délky objektu.

Seznam je seřazen podle délky prvku od nejnižšího počtu po nejvyšší.

Příklad 3: Řazení seznamu pomocí seřazeného () s klíčovou funkcí

 # take the second element for sort def take_second(elem): return elem(1) # random list random = ((2, 2), (3, 4), (4, 1), (1, 3)) # sort list with key sorted_list = sorted(random, key=take_second) # print list print('Sorted list:', sorted_list)

Výstup

 Řazený seznam: ((4, 1), (2, 2), (1, 3), (3, 4))

Příklad 4: Řazení pomocí více kláves

Předpokládejme, že máme následující seznam:

 # Nested list of student's info in a Science Olympiad # List elements: (Student's Name, Marks out of 100, Age) participant_list = ( ('Alison', 50, 18), ('Terence', 75, 12), ('David', 75, 20), ('Jimmy', 90, 22), ('John', 45, 12) )

Chceme seřadit seznam tak, aby student s nejvyššími známkami byl na začátku. V případě, že mají studenti stejné známky, je třeba je seřadit, aby byl mladší účastník na prvním místě.

Můžeme dosáhnout tohoto typu třídění pomocí více klíčů tím, že místo čísla vrátíme n-tici.

Dvě n-tice lze porovnat porovnáním jejich prvků počínaje od prvního. Pokud existuje remíza (prvky jsou stejné), porovnává se druhý prvek atd.

 >>> (1,3)> (1, 4) False >>> (1, 4) >> (1, 4, 1) < (2, 1) True

Použijme tuto logiku k vytvoření logiky třídění.

 # Nested list of student's info in a Science Olympiad # List elements: (Student's Name, Marks out of 100 , Age) participant_list = ( ('Alison', 50, 18), ('Terence', 75, 12), ('David', 75, 20), ('Jimmy', 90, 22), ('John', 45, 12) ) def sorter(item): # Since highest marks first, least error = most marks error = 100 - item(1) age = item(2) return (error, age) sorted_list = sorted(participant_list, key=sorter) print(sorted_list)

Výstup

 ((('Jimmy', 90, 22), ('Terence', 75, 12), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 12) )

Vzhledem k tomu, že logická funkce třídění je malá a vejde se do jednoho řádku, lambdafunkce se používá uvnitř, keymísto aby předávala samostatný název funkce.

Výše uvedený program lze zapsat pomocí lambdafunkce následujícím způsobem:

 # Nested list of student's info in a Science Olympiad # List elements: (Student's Name, Marks out of 100 , Age) participant_list = ( ('Alison', 50, 18), ('Terence', 75, 12), ('David', 75, 20), ('Jimmy', 90, 22), ('John', 45, 12) ) sorted_list = sorted(participant_list, key=lambda item: (100-item(1), item(2))) print(sorted_list)

Výstup

 ((('Jimmy', 90, 22), ('Terence', 75, 12), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 12) )

Další informace o funkcích lambda najdete na stránkách Python Lambda Functions.

Zajímavé články...