Python сортиран ()

Функцията sorted () връща сортиран списък от елементите в итерация.

Най sorted()функцията сортира елементите на дадена iterable в определен ред (или възходящи или низходящи ) и се връща на iterable подредени под формата на списък.

Синтаксисът на sorted()функцията е:

 сортирано (итерируемо, ключ = няма, обратно = невярно)

Параметри за функцията sorted ()

sorted() може да вземе максимум три параметъра:

  • iterable - Последователност (низ, кортеж, списък) или колекция (набор, речник, замразен набор) или друг итератор.
  • обратен (по избор) - Ако Trueсортираният списък е обърнат (или сортиран в низходящ ред). По подразбиране, Falseако не е предоставено.
  • ключ (по избор) - Функция, която служи като ключ за сравнение на сортирането. По подразбиране None.

Пример 1: Сортиране на низ, списък и кортеж

 # 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))

Изход

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

Забележете, че във всички случаи се връща сортиран списък.

Забележка: Списъкът също има метод sort (), който се изпълнява по същия начин като sorted(). Единствената разлика е, че sort()методът не връща никаква стойност и променя оригиналния списък.

Пример 2: Сортиране в низходящ ред

Най sorted()функцията приема reverseпараметър като незадължителен аргумент.

Настройката reverse = Trueсортира итерацията в низходящ ред.

 # 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))

Изход

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

ключ Параметър във функцията Python sorted ()

Ако искате вашата собствена реализация за сортиране, sorted()също приема keyфункция като незадължителен параметър.

Въз основа на върнатата стойност на ключовата функция можете да сортирате дадената итерация.

 сортирано (итерируемо, ключ = len)

Тук len()е вградената функция на Python за отчитане дължината на обект.

Списъкът се сортира въз основа на дължината на елемента, от най-ниския брой до най-големия.

Пример 3: Сортирайте списъка, като използвате sorted () с ключова функция

 # 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)

Изход

 Сортиран списък: ((4, 1), (2, 2), (1, 3), (3, 4))

Пример 4: Сортиране с множество ключове

Да предположим, че имаме следния списък:

 # 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) )

Искаме да сортираме списъка по такъв начин, че студентът с най-високи оценки да е в началото. В случай, че учениците имат равни оценки, те трябва да бъдат сортирани, така че по-младият участник да е на първо място.

Можем да постигнем този тип сортиране с множество ключове, като върнем кортеж вместо число.

Две кортежи могат да бъдат сравнени чрез сравняване на техните елементи, започвайки от първо. Ако има равенство (елементите са равни), вторият елемент се сравнява и т.н.

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

Нека използваме тази логика, за да изградим нашата логика за сортиране.

 # 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)

Изход

 (("Джими", 90, 22), ("Теренс", 75, 12), ("Дейвид", 75, 20), ("Алисън", 50, 18), ("Джон", 45, 12) )

Тъй като логическата функция за сортиране е малка и се побира в един ред, lambdaфункцията се използва вътре, keyвместо да предава отделно име на функция.

Горната програма може да бъде написана с помощта на lambdaфункцията по следния начин:

 # 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)

Изход

 (("Джими", 90, 22), ("Теренс", 75, 12), ("Дейвид", 75, 20), ("Алисън", 50, 18), ("Джон", 45, 12) )

За да научите повече за ламбда функциите, посетете Python Lambda Functions.

Интересни статии...