Lajiteltu () -funktio palauttaa lajitellun luettelon iteroitavissa olevista kohteista.
sorted()
Toiminto lajittelee elementit tietyn iterable tietyssä järjestyksessä (joko nouseva tai alenevassa ) ja palaa lajitellut iterable luettelona.
sorted()
Funktion syntaksi on:
lajiteltu (iteroitava, avain = ei mitään, käänteinen = väärä)
Lajiteltu () -funktion parametrit
sorted()
voi ottaa enintään kolme parametria:
- iteroitava - sarja (merkkijono, sekvenssi, luettelo) tai kokoelma (sarja, sanakirja, jäädytetty sarja) tai mikä tahansa muu iteraattori.
- käänteinen (valinnainen) - Jos
True
, lajiteltu luettelo on päinvastainen (tai lajiteltu laskevassa järjestyksessä). Oletusarvo on,False
jos sitä ei toimiteta. - avain (valinnainen) - toiminto, joka toimii avaintena lajitteluvertailussa. Oletusarvo on
None
.
Esimerkki 1: Lajittele merkkijono, luettelo ja sekoitus
# 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))
Tuotos
('a', 'e', 'i', 'o', 'u' ('P', 'h', 'n', 'o', 't', 'y') ('a' , 'e', 'i', 'o', 'u')
Huomaa, että lajiteltu luettelo palautetaan kaikissa tapauksissa.
Huomaa: Luettelossa on myös lajittelu () -menetelmä, joka toimii samalla tavalla kuin sorted()
. Ainoa ero on, että sort()
menetelmä ei palauta arvoa ja muuttaa alkuperäistä luetteloa.
Esimerkki 2: Lajittele laskevassa järjestyksessä
sorted()
Toiminto hyväksyy reverse
parametri valinnaisena argumentti.
Asetus reverse = True
lajittelee iteroitavan laskevassa järjestyksessä.
# 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))
Tuotos
('u', 'o', 'i', 'e', 'a') ('u', 'o', 'i', 'e', 'a') ('u', 'o' , 'i', 'e', 'a')
avainparametri Python-lajiteltu () -funktiossa
Jos haluat oman toteutuksen lajittelua varten, sorted()
hyväksyy myös key
toiminnon valinnaisena parametrina.
Avaintoiminnon palautetun arvon perusteella voit lajitella annetun iteroinnin.
lajiteltu (iterable, key = len)
Tässä len()
on Pythonin sisäänrakennettu toiminto objektin pituuden laskemiseksi.
Luettelo on lajiteltu elementin pituuden mukaan pienimmästä lukemasta suurimpaan.
Esimerkki 3: Lajittele luettelo käyttämällä lajiteltuja (), joilla on näppäintoiminto
# 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)
Tuotos
Lajiteltu luettelo: ((4, 1), (2, 2), (1, 3), (3, 4))
Esimerkki 4: Lajittelu useilla avaimilla
Oletetaan, että meillä on seuraava luettelo:
# 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) )
Haluamme lajitella luettelon siten, että korkeimpien pisteiden saanut opiskelija on alussa. Jos opiskelijoilla on yhtäläiset arvosanat, ne on lajiteltava siten, että nuorempi osallistuja tulee ensin.
Voimme saavuttaa tämän tyyppisen lajittelun useilla avaimilla palauttamalla dupleksin luvun sijaan.
Kaksi joukkoa voidaan verrata vertaamalla niiden alkuaineita alusta alkaen. Jos on tasapeli (elementit ovat samat), toista elementtiä verrataan jne.
>>> (1,3)> (1, 4) False >>> (1, 4) >> (1, 4, 1) < (2, 1) True
Käytetään tätä logiikkaa rakentaaksemme lajittelulogiikkamme.
# 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)
Tuotos
(('Jimmy', 90, 22), ('Terence', 75, 12), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 12) )
Koska lajittelulogiikkafunktio on pieni ja sopii yhdelle riville, lambda
funktiota käytetään sisällä key
sen sijaan, että välitettäisiin erillinen funktion nimi.
Yllä oleva ohjelma voidaan kirjoittaa lambda
toiminnon avulla seuraavasti:
# 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)
Tuotos
(('Jimmy', 90, 22), ('Terence', 75, 12), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 12) )
Lisätietoja lambda-toiminnoista on Python Lambda -toiminnoissa.