Du er ikke logget inn. Så lenge du ikke er logget inn går du glipp av muligheten for å holde styr på din egen progresjon.

Logg inn

Valgte tags:

Filtrering:

Skriv ut:

Lister 4: sortering

Ofte når vi jobber med tekst har vi behov for å sortere lister på en eller annen måte. Her skal vi bare ta for oss enkel bruk av .sort()-metoden. Vi kan velge å sortere baklengs ved å spesifisere .sort(reverse=True). Her bruker vi nøkkelordargumentet(key word argument) "reverse", og gir det den boolske verdien True. Metoden sorterer tall i rekkefølge, og strenger i alfabetisk rekkefølge.

Eksempel:

strengliste1 = ["d","a","m","b","c","g"]
talliste1 = [6,3,9,3,8,1,2]
strengliste2 = ["d","a","m","b","c","g"]
talliste2 = [6,3,9,3,8,1,2]

strengliste1.sort()
talliste1.sort()
strengliste2.sort(reverse=True)
talliste2.sort(reverse=True)

print(strengliste1)
print(talliste1)
print(strengliste2)
print(talliste2)
['a', 'b', 'c', 'd', 'g', 'm']
[1, 2, 3, 3, 6, 8, 9]
['m', 'g', 'd', 'c', 'b', 'a']
[9, 8, 6, 3, 3, 2, 1]

Oppgaver

a) Sorter lista under og skriv den ut til terminalen.
b) Sorter lista under i motsatt rekkefølge og skriv den ut til terminalen.

liste1 = ["åme","larve","kryp","mark","snegle","bille"]

c) Del opp teksten under (NRK) og skriv ut det ordet som er først i alfabetisk rekkefølge, og det ordet som er sist i alfabetisk rekkefølge. Tips: vi kan skrive liste[-1] for å få tak i det siste elementet i ei liste.

tekst = """Derfor måtte dei utvikle ein ny metode . Denne er basert på bruken av ein heilt ny type høgenergi røntgenteknologi , saman med ein type kunstig intelligens kalla maskinlæring . Maskinlæring er ifølgje Wikipedia ein vitskapleg disiplin som utviklar algoritmar , som igjen gjer datamaskinar i stand til å lære frå og utvikle framferd basert på empiriske data ."""

d) Lag et program der brukeren skal skrive inn ei liste med ord, adskilt med mellomrom (F.eks. "ost melk kake"). Ta så inn input fra brukeren som skal bestemme om lista skal sorteres i vanlig eller motsatt rekkefølge. Sorter lista etter brukerens ønske, og skriv den ut til terminalen.

Vis løsningsforslag

a)

liste1 = ["åme","larve","kryp","mark","snegle","bille"]

liste1.sort()

print(liste1)

Utskrift:

['bille', 'kryp', 'larve', 'mark', 'snegle', 'åme']

b)

liste1 = ["åme","larve","kryp","mark","snegle","bille"]

liste1.sort(reverse=True)

print(liste1)

Utskrift:

['åme', 'snegle', 'mark', 'larve', 'kryp', 'bille']

c)

tekst = """Derfor måtte dei utvikle ein ny metode . Denne er basert på bruken av ein heilt ny type høgenergi røntgenteknologi , saman med ein type\
 kunstig intelligens kalla maskinlæring . Maskinlæring er ifølgje Wikipedia ein vitskapleg disiplin som utviklar algoritmar , som igjen gjer datam\
askinar i stand til å lære frå og utvikle framferd basert på empiriske data ."""

tekst_liste = tekst.split()
#sorterer så det kommer i alfabetisk rekkefølge                                                                                                    
tekst_liste.sort()
print("Det første ordet:",tekst_liste[0])
print("Det siste ordet:",tekst_liste[-1])

Siden .sort() gjør at alt kommer i alfabetisk rekkefølge kan vi ta det første og det siste elementet. Vi kunne selvsagt også gjort det motsatt, og sortert med .sort(reverse=True), men da ville det første elementet vært tekst_liste[-1], og det siste vært tekst_liste[0].

I tillegg til å kunne bruke negative indekser for å hente ut elementer fra slutten av ei liste, som tekst_liste[-1], kunne vi også skrevet tekst_liste[len(tekst_liste) - 1]. Å bruke negative indekser er litt spesielt for Python, og det er ikke alle språk som har den funksjonaliteten. Vi må ha - 1 fordi tallet som indikerer lengden på ei liste alltid vil være én mer enn den høyeste indeksen, siden indeksen i ei liste begynner på 0.

Utskrift:

Det første ordet: ,
Det siste ordet: å

Vi ser at tegnsetting sorteres før bokstavene, og at den norske å-en kommer sent, som den skal.

d)

Vi tar inn det vi trenger fra brukeren, og splitter strengene før vi sjekker om brukeren svarte ja eller nei.

brukerliste =    input("Skriv flere ord etter hverandre med mellomrom.\n")
vanlig_rekkefoelge = input("Vil du sortere i vanlig rekkefølge? Svar 'ja' eller 'nei'.\n")

liste =    brukerliste.split()

if vanlig_rekkefoelge.lower() == "ja":
    liste.sort()
    print("Du har valgt å sortere i vanlig rekkefølge:")
    print(liste)
else:
    liste.sort(reverse=True)
    print("Du har valgt å sortere i motsatt rekkefølge:")
    print(liste)

Grunnen til å ha .lower() på variabelen er bare for å forhindre at "Ja" (med stor J) gir feil resultat. Det er en av flere ting vi kan gjøre for å gi en bedre brukeropplevelse.

Utskrift med "ja":

>>>Skriv flere ord etter hverandre med mellomrom.
pære fiken vannmelon eple rambutan
>>>Vil du sortere i vanlig rekkefølge? Svar 'ja' eller 'nei'.
ja
>>>Du har valgt å sortere i vanlig rekkefølge:
>>>['eple', 'fiken', 'pære', 'rambutan', 'vannmelon']

Utskrift med "nei":

>>>Skriv flere ord etter hverandre med mellomrom.
pære fiken vannmelon eple rambutan
>>>Vil du sortere i vanlig rekkefølge? Svar 'ja' eller 'nei'.
nei
>>>Du har valgt å sortere i motsatt rekkefølge:
>>>['vannmelon', 'rambutan', 'pære', 'fiken', 'eple']