Søke i lister

Å søke etter innhold i lister er noe vil ha behov for å gjøre mye. For å avgjøre om en verdi finnes i ei liste eller ikke, kan vi bruke kodeordet in. Hvis liste er ei liste og a en verdi, vil uttrykket a in liste være True hvis a finnes i liste, False hvis ikke.

Eksempel 1:

# Oppretter lista demo, og lar brukeren søke etter tall
demo = [7, -3, 8, 4, 8]
tall = int(input("Hvilket tall vil du søke etter? "))
print(tall in demo)

Skriver vi for eksempel at vi vil søke etter 7, får vi skrevet ut True. Skriver vi at vi vil søke etter 11, får vi skrevet ut False.

I stedet for å skrive ut True og False direkte kan vi bruke verdien i en if-konstruksjon, som i eksempel 2.

Eksempel 2:

# Oppretter lista demo, og lar brukeren søke etter tall
demo = [7, -3, 8, 4, 8]
tall = int(input("Hvilket tall vil du søke etter? "))
if tall in demo:
    print(f"{tall} finnes i demo.")
else:
    print(f"{tall} finnes ikke i demo.")

Skriver vi for eksempel at vi vil søke etter 7, får vi skrevet ut 7 finnes i demo. Skriver vi at vi vil søke etter 11, får vi skrevet ut 11 finnes ikke i demo.

Er vi interessert i indeksen til verdien vi søker etter, kan vi bruke liste-metoden index(), som beskrives i artikkelen om liste-metoder. index() finner indeksen til første forekomst av et element i ei liste. Dersom elementet ikke finnes i lista, får vi imidlertid en feilmelding. Før vi bruker index(), bruker vi derfor in til å sjekke om elementet faktisk finnes i lista, slik det er vist i eksempel 3.

Eksempel 3:

# Oppretter lista demo, og lar brukeren finne indeks til et tall
demo = [7, -3, 8, 4, 8]
tall = int(input("Hvilket tall vil du finne indeks til? "))
if tall in demo:
    print(f"{tall} har indeks {demo.index(tall)}.")
else:
    print(f"{tall} finnes ikke i lista.")

Skriver vi for eksempel at vi vil finne indeks til 7, får vi skrevet ut 7 har indeks 0. Skriver vi at vi vil finne indeks til 11, får vi skrevet ut 11 finnes ikke i lista.

Ofte har vi imidlertid behov for å gjøre mer avanserte søk i ei liste, der vi selv må skrive kode som gjennomløper lista og sjekker elementene ett for ett.

I eksempel 4 undersøker vi hvor mange tall i ei liste som er partall. Et tall, a, er partall hvis a % 2 == 0.

Eksempel 4:

# Oppretter lista demo, og teller antall partall i lista
demo = [7, -3, 8, 4, 8]
antall = 0
for tall in demo:
    if tall % 2 == 0:  # Tallet er et partall
        antall += 1
print(f"Lista inneholder {antall} partall.")

For å telle partall oppretter vi en variabel å telle med. Vi har kalt den antall, men den kan hete hva som helst. Variabelen setter vi i utgangspunktet til 0, og øker verdien med 1 for hvert partall vi finner. En slik variabel kaller vi gjerne en akkumulator.

Når vi kjører koden, får vi skrevet ut Lista inneholder 3 partall., fordi den inneholder partallene 8, 4 og 8.

Oppgave 1:

Skriv kode som oppretter lista ensifrede, som inneholder heltallene fra og med 1 til og med 9, og skriver ut hvor mange av tallene i lista som er delelige med 4.

Riktig svar er 2, nemlig tallene 4 og 8.

Hint: Husk at du kan bruke list(range()) til å generere ei liste med tall.

Hint: Et tall, a, er delelig med 4 hvis a % 4 == 0.

Se løsningsforslag

Kilder

    • Matthes A. (2019). Python Crash Course. no starch press