ProgrammatiePython ontwikkelaar

Hoe werkt de functie sorted() in Python, wat is het verschil met de sort() methode van lijsten, welke nuances zijn er bij het gebruik van de key en reverse parameters?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord.

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.
  • De parameter 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:

  • sorted() retourneert altijd een nieuwe lijst zonder de bron aan te raken.
  • sort() werkt alleen met de lijst zelf en retourneert geen nieuw object.
  • de key optie kan elke functie zijn die waarden retourneert voor vergelijking.

Vragen met een valstrik.

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

Typische fouten en anti-patronen

  • sort() gebruiken, terwijl je een nieuwe gesorteerde lijst verwacht.
  • Proberen een onveranderlijk object te sorteren met de sort() methode.
  • Een functie geven aan key die waarden met verschillende types retourneert.

Voorbeeld uit het leven

Negatieve case

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:

  • Wijzigt de lijst ter plaatse (bespaart soms geheugen).

Nadelen:

  • Retourneert None, wat de verdere logica verstoort.

Positieve case

Correct gebruik:

lst = ['one', 'elephant'] ans = sorted(lst, key=len) print(ans) # ['one', 'elephant']

Voordelen:

  • De oorspronkelijke lijst wordt niet gewijzigd.
  • We krijgen het verwachte resultaat.

Nadelen:

  • Maakt extra geheugen vrij voor een nieuwe lijst.