Geschiedenis van de vraag:
Sinds het begin heeft de taal Python ingebouwde hulpmiddelen voor het sorteren van verzamelingen. De methoden sort() en de functie sorted() zijn geïntroduceerd in de tweede versie van Python, maar vanaf Python 2.4 werd sorted() geïntroduceerd als een universeel hulpmiddel om alle herhaalbare objecten (niet alleen lijsten) te sorteren.
Probleem:
Vaak is er behoefte om gegevens op verschillende criteria te sorteren en niet altijd wil je het oorspronkelijke object wijzigen. Beginners verwarren sort() en sorted(), begrijpen niet waar elk van toepassing is, en maken fouten met de sorteersleutel en de omgekeerde volgorde.
Oplossing:
sorted(herhaalbaar_object, key=None, reverse=False) retourneert altijd een nieuw lijstobject zonder het origineel te wijzigen.list.sort(key=None, reverse=False) sorteert de lijst zelf ter plaatse (in-place) en retourneert None.key is een functie die bepaalt op welk criterium gesorteerd moet worden.reverse=True verandert de volgorde naar omgekeerd.Voorbeeld van het sorteren van een lijst met strings op hun lengte, in omgekeerde volgorde:
words = ['python', 'is', 'strong', 'language'] sorted_words = sorted(words, key=len, reverse=True) print(sorted_words) # ['language', 'python', 'strong', 'is']
Belangrijke kenmerken:
Wat retourneert de sort() methode?
De list.sort() methode sorteert de lijst zelf en retourneert altijd None, wat vaak vergeten wordt.
lst = [3, 1, 2] res = lst.sort() print(res) # None print(lst) # [1, 2, 3]
Kun je een tuple sorteren met sort()?
Dat kan niet, tuples zijn onveranderlijk en hebben geen .sort() methode. Gebruik sorted() om te sorteren.
tuple_data = (5,2,3) sorted_tuple = sorted(tuple_data) print(sorted_tuple) # [2, 3, 5]
Wat gebeurt er als je in key een functie opgeeft die verschillende types retourneert?
Er zal een TypeError-exceptie optreden als de geretourneerde waarden niet met elkaar vergeleken kunnen worden (bijvoorbeeld, int en str).
Tijdens het interview wordt gevraagd om een lijst gesorteerd op lengte terug te geven, maar de kandidaat doet:
lst = ['one', 'elephant'] ans = lst.sort(key=len) print(ans) # None
Voordelen:
Nadelen:
Correct gebruik:
lst = ['one', 'elephant'] ans = sorted(lst, key=len) print(ans) # ['one', 'elephant']
Voordelen:
Nadelen: