Lær deg Python_Modul_1‐4_Del3 - itnett/FTD02H-N GitHub Wiki

La oss fortsette videre mot neste steg, hvor vi utforsker enda mer avanserte konsepter i Python! I denne delen skal vi se på:

  1. Mer om datahåndtering – inkludert avansert filhåndtering og arbeid med lister.
  2. Sortering av lister – og spesielt hvordan vi implementerer algoritmer som bubble sort.
  3. Videreføring av listeoperasjoner – hvordan vi manipulerer lister på forskjellige måter.
  4. Avanserte bruksområder for lister – hvordan lister kan brukes i mer komplekse applikasjoner.

🐍 Python Essentials 1 – Modul 4 (Del 6): Avansert Datahåndtering, Lister og Sortering 🛠️


1️⃣ Avansert Datahåndtering: Filoperasjoner og Data 🗄️

Vi har allerede sett hvordan vi kan lese og skrive filer i Python, men nå skal vi utforske flere måter å håndtere data effektivt på.

Lese store filer linje for linje:

Når du jobber med store filer, er det ikke alltid effektivt å lese hele filen på én gang. Det kan føre til at programmet bruker mye minne. I stedet kan du lese filer linje for linje.

Eksempel:

with open('stor_fil.txt', 'r') as fil:
    for linje i fil:
        print(linje.strip())  # Fjerner unødvendige mellomrom

Her bruker vi en for-løkke for å lese filen linje for linje. Dette er mye mer minneeffektivt, spesielt for store filer.


Skrive til filer:

Når vi skriver data til filer, har vi sett eksempler med vanlig tekst. Men hva om vi ønsker å lagre data på en strukturert måte, som lister eller ordbøker?

Vi kan bruke json-modulen til å lagre lister og ordbøker som JSON-data, og så lese dem tilbake senere.

Skrive JSON-data:

import json

data = {
    "navn": "Kari",
    "alder": 30,
    "by": "Oslo"
}

with open('person_data.json', 'w') as fil:
    json.dump(data, fil)

Lese JSON-data:

with open('person_data.json', 'r') as fil:
    innhold = json.load(fil)
    print(innhold)

Tenk etter: Hvordan ville det vært å lagre flere personer i filen? Du kan lagre en liste med ordbøker i stedet for bare én ordbok.


2️⃣ Sortering av lister: Bubble Sort Algoritmen 🔄

Hva er bubble sort? 🤔

Bubble sort er en enkel algoritme som brukes til å sortere lister. Algoritmen fungerer ved å gjentatte ganger gå gjennom listen og bytte plass på to elementer hvis de er i feil rekkefølge.

Slik fungerer bubble sort:

  1. Gå gjennom listen fra start til slutt.
  2. Hvis to nabo-elementer er i feil rekkefølge, bytt plass på dem.
  3. Fortsett til hele listen er sortert.

Implementasjon av bubble sort i Python:

def bubble_sort(liste):
    n = len(liste)
    for i in range(n):
        for j in range(0, n - i - 1):
            if liste[j] > liste[j + 1]:
                # Bytt plass hvis elementet er større enn neste element
                liste[j], liste[j + 1] = liste[j + 1], liste[j]
    return liste

# Test liste
tall = [64, 34, 25, 12, 22, 11, 90]
sortert_liste = bubble_sort(tall)
print("Sortert liste:", sortert_liste)

Denne koden går gjennom listen flere ganger og sorterer den i stigende rekkefølge.

Tenk etter: Hva tror du vil skje hvis vi sorterer listen i synkende rekkefølge? Du kan endre > til < i koden for å teste dette.


3️⃣ Videreføring av Listeoperasjoner 🔄

Python-lister er ekstremt kraftige og fleksible. Nå skal vi se på flere operasjoner vi kan utføre på lister, inkludert filtrering, slicing, og list comprehension.

Liste-filtrering:

Noen ganger ønsker du å filtrere ut bestemte elementer fra en liste basert på en betingelse. Dette kan gjøres med en enkel for-løkke eller med en mer kompakt metode kalt list comprehension.

Eksempel med for-løkke:

tall = [1, 2, 3, 4, 5, 6, 7, 8]
partall = []

for nummer i tall:
    if nummer % 2 == 0:
        partall.append(nummer)

print(partall)  # Skriver ut: [2, 4, 6, 8]

Samme eksempel med list comprehension:

partall = [nummer for nummer i tall hvis nummer % 2 == 0]
print(partall)  # Skriver ut: [2, 4, 6, 8]

Liste-slicing:

Du kan bruke slicing for å hente ut en del av listen.

Eksempel:

tall = [1, 2, 3, 4, 5, 6, 7, 8]
del_av_liste = tall[2:5]  # Henter ut elementene fra indeks 2 til 4
print(del_av_liste)  # Skriver ut: [3, 4, 5]

Slicing er veldig fleksibelt og kan også brukes til å hente ut elementer fra en liste med bestemte steg.


4️⃣ Avanserte Bruksområder for Lister 🚀

Lister kan brukes på mange kreative måter, inkludert sortering, filtrering og databehandling. Du kan kombinere flere av teknikkene vi har lært så langt for å lage kraftige løsninger.

Kombinere lister og ordbøker:

Hvis du har en liste med ordbøker, kan du sortere, filtrere og bearbeide dem på mange forskjellige måter.

Eksempel:

personer = [
    {"navn": "Ole", "alder": 30},
    {"navn": "Kari", "alder": 25},
    {"navn": "Per", "alder": 35}
]

# Sorter personer basert på alder
sortert_personer = sorted(personer, key=lambda person: person['alder'])
print(sortert_personer)

# Filtrer personer over 30 år
over_30 = [person for person i personer hvis person['alder'] > 30]
print(over_30)

Her bruker vi en kombinasjon av lambda-funksjoner, list comprehension, og sortering for å behandle dataene våre.


🧪 Test deg selv!

  1. Implementer bubble sort-algoritmen, men sorter listen i synkende rekkefølge.
  2. Lag en liste med tilfeldige tall og bruk list comprehension for å filtrere ut alle partall.
  3. Bruk slicing til å hente ut de siste tre elementene i en liste.
  4. Lag en liste med ordbøker som representerer personer, og sorter dem basert på fornavn.

🎓 Oppsummering:

  • Filhåndtering kan gjøres linje for linje for store filer, og vi kan lagre mer komplekse datastrukturer som JSON.
  • Bubble sort er en enkel algoritme for å sortere lister. Den bytter plass på elementer til listen er sortert.
  • Vi har sett flere måter å manipulere lister på, inkludert filtrering, slicing, og list comprehension.
  • Lister kan kombineres med ordbøker for å lage kraftige datastrukturer som kan sorteres og filtreres på mange måter.

Er du klar for neste steg? Vi skal fortsette med enda mer avanserte listeoperasjoner, se på hvordan vi kan optimalisere koden vår, og begynne å jobbe med enda større datasett! 🚀👨‍💻👩‍💻

La oss fortsette vår læringsreise! Nå skal vi dykke enda dypere inn i noen svært viktige konsepter i Python, som blant annet:

  1. Avanserte operasjoner på lister – hvordan vi kan bruke og manipulere lister i større programmer.
  2. Bubble sort-algoritmen – gå dypere inn i hvordan den fungerer og hvordan vi kan optimalisere den.
  3. Operasjoner på lister – flere måter å jobbe med lister på, inkludert å slå dem sammen, finne felles elementer og mer.
  4. Avanserte applikasjoner av lister – hvordan lister kan brukes til å løse komplekse problemer.

🐍 Python Essentials 1 – Modul 4 (Del 7): Avanserte Listeoperasjoner og Sorteringsalgoritmer 🛠️


1️⃣ Avanserte Operasjoner på Lister 🔄

Legge til og fjerne elementer i lister:

Lister er svært dynamiske, og Python tilbyr flere måter å legge til eller fjerne elementer fra lister på.

Legge til elementer:

Du kan bruke append() for å legge til ett element, eller extend() for å legge til flere elementer fra en annen liste.

Eksempel:

frukt = ['eple', 'banan']
frukt.append('pære')  # Legger til én frukt
print(frukt)  # Skriver ut: ['eple', 'banan', 'pære']

frukt.extend(['appelsin', 'druer'])  # Legger til flere frukter
print(frukt)  # Skriver ut: ['eple', 'banan', 'pære', 'appelsin', 'druer']

Fjerne elementer:

Du kan bruke remove() for å fjerne et bestemt element, eller pop() for å fjerne et element på en gitt indeks.

Eksempel:

frukt = ['eple', 'banan', 'pære']
frukt.remove('banan')  # Fjerner 'banan'
print(frukt)  # Skriver ut: ['eple', 'pære']

frukt.pop(0)  # Fjerner elementet på indeks 0
print(frukt)  # Skriver ut: ['pære']

Slå sammen to lister:

Du kan slå sammen to eller flere lister ved å bruke +-operatoren.

Eksempel:

liste1 = [1, 2, 3]
liste2 = [4, 5, 6]
samlet_liste = liste1 + liste2
print(samlet_liste)  # Skriver ut: [1, 2, 3, 4, 5, 6]

Dette er spesielt nyttig når du vil kombinere flere datasett til ett.


Finne felles elementer i to lister:

Når du har to lister, kan du bruke set-interseksjon for å finne felles elementer mellom dem.

Eksempel:

liste1 = [1, 2, 3, 4]
liste2 = [3, 4, 5, 6]
felles = list(set(liste1) & set(liste2))
print(felles)  # Skriver ut: [3, 4]

Her bruker vi sett for å finne felles elementer på en effektiv måte.


2️⃣ Optimalisering av Bubble Sort 🧠

Hvordan fungerer Bubble Sort?

Bubble sort er en enkel sorteringsalgoritme som gjentatte ganger går gjennom listen og bytter plass på elementer hvis de er i feil rekkefølge. Algoritmen gjentas til listen er sortert.

Men denne algoritmen kan bli ganske treg for store lister, siden den har en tidkompleksitet på O(n²) i verste fall. Vi kan optimalisere den ved å stoppe hvis listen allerede er sortert.

Optimalisert Bubble Sort:

I denne versjonen av bubble sort, legger vi til en sjekk for å se om det ble gjort noen bytter i den nåværende iterasjonen. Hvis ingen bytter ble gjort, er listen allerede sortert, og vi kan avslutte tidlig.

def optimalisert_bubble_sort(liste):
    n = len(liste)
    for i in range(n):
        sortert = True
        for j in range(0, n - i - 1):
            if liste[j] > liste[j + 1]:
                liste[j], liste[j + 1] = liste[j + 1], liste[j]
                sortert = False
        if sortert:
            break
    return liste

tall = [64, 34, 25, 12, 22, 11, 90]
print(optimalisert_bubble_sort(tall))  # Skriver ut en sortert liste

Denne optimaliseringen reduserer antall unødvendige iterasjoner.

Tenk etter: Hva er forskjellen mellom vanlig bubble sort og denne optimaliserte versjonen?


3️⃣ Operasjoner på Lister: Avanserte Metoder 🔄

Python-lister tilbyr et bredt spekter av innebygde funksjoner og metoder for å manipulere dataene dine. Her er noen av de mest nyttige:

sort() og sorted():

For å sortere lister på en enkel måte, kan du bruke sort() eller sorted().

  • sort() endrer listen i stedet.
  • sorted() returnerer en ny sortert liste, uten å endre den opprinnelige listen.

Eksempel:

tall = [3, 1, 4, 1, 5, 9]
tall.sort()  # Sorterer listen
print(tall)  # Skriver ut: [1, 1, 3, 4, 5, 9]

tall = [3, 1, 4, 1, 5, 9]
ny_tall = sorted(tall)  # Returnerer en ny sortert liste
print(ny_tall)  # Skriver ut: [1, 1, 3, 4, 5, 9]
print(tall)  # Opprinnelige liste er uendret: [3, 1, 4, 1, 5, 9]

reverse():

Du kan snu rekkefølgen på elementene i en liste med reverse().

Eksempel:

tall = [1, 2, 3, 4, 5]
tall.reverse()
print(tall)  # Skriver ut: [5, 4, 3, 2, 1]

Kombinasjon av metoder:

Du kan kombinere flere av disse metodene for å manipulere dataene på komplekse måter.

Eksempel:

tall = [5, 3, 8, 6, 7, 2]
sortert_og_snu = sorted(tall, reverse=True)  # Sorterer i synkende rekkefølge
print(sortert_og_snu)  # Skriver ut: [8, 7, 6, 5, 3, 2]

4️⃣ Avanserte Applikasjoner av Lister 🚀

Lister kan brukes til å løse mange ulike problemer. Her er noen eksempler på mer avanserte bruksområder.

Sammenligne og finne ulikheter mellom lister:

Hvis du har to lister, kan du bruke sett-operasjoner for å finne elementer som er i én liste, men ikke i den andre.

Eksempel:

liste1 = [1, 2, 3, 4]
liste2 = [3, 4, 5, 6]
ulikheter = list(set(liste1) - set(liste2))
print(ulikheter)  # Skriver ut: [1, 2]

Avansert databehandling med lister:

Hvis du har en stor mengde data, kan du bruke lister for å lagre og behandle disse på forskjellige måter. For eksempel kan du bruke lister til å holde styr på studentkarakterer og beregne gjennomsnittskarakterer.

Eksempel:

karakterer = [85, 90, 78, 92, 88]
gjennomsnitt = sum(karakterer) / len(karakterer)
print(f"Gjennomsnittskarakteren er: {gjennomsnitt}")

🧪 Test deg selv!

  1. Lag en liste med tall og sorter dem i synkende rekkefølge ved å bruke sort() eller sorted().
  2. Bruk bubble sort til å sortere en liste med tall og stopp tidlig hvis listen allerede er sortert.
  3. Bruk sett-operasjoner til å finne elementer som er i én liste, men ikke i den andre.
  4. Lag en liste med ordbøker som inneholder informasjon om personer (navn, alder), og sorter dem basert på alder.

🎓 Oppsummering:

  • Vi har sett flere

måter å legge til og fjerne elementer i lister på, inkludert bruk av append(), extend(), og remove().

  • Vi lærte å slå sammen lister og finne felles elementer med sett-operasjoner.
  • Bubble sort-algoritmen kan optimaliseres ved å stoppe tidlig hvis ingen bytter ble gjort.
  • Python tilbyr mange innebygde metoder for å manipulere lister, som sort(), reverse(), og sorted().
  • Lister kan brukes til mange avanserte applikasjoner, inkludert databehandling og sortering av komplekse datasett.

Er du klar for mer avanserte konsepter? Vi skal fortsette med enda flere datastrukturer, optimaliseringer og avanserte løsninger! 🚀👨‍💻👩‍💻

Nå er vi klare for å utforske enda flere spennende og nyttige konsepter i Python! I denne modulen skal vi dekke:

  1. Logiske operasjoner og bitoperasjoner – hvordan du kan bruke logikk og bitvis operasjon for å jobbe med data.
  2. Avansert bruk av lister – flere teknikker for å manipulere og optimalisere lister.
  3. Sortering med bubble sort – flere varianter og optimaliseringer.
  4. Datahåndtering på høyt nivå – jobbe med store datasett, lagring og effektiv behandling.

🐍 Python Essentials 1 – Modul 4 (Del 8): Logikk, Bitoperasjoner og Avanserte Listeoperasjoner 🛠️


1️⃣ Logiske Operasjoner i Python 🧠

Hva er logiske operasjoner?

Logiske operasjoner brukes til å evaluere betingelser som er enten sanne eller falske. Dette er nyttig når vi trenger å gjøre beslutninger i koden vår.

Python har tre hovedlogiske operatører:

  • and: Sann hvis begge betingelsene er sanne.
  • or: Sann hvis minst én betingelse er sann.
  • not: Inverterer verdien; hvis betingelsen er sann, blir den falsk og omvendt.

Eksempel:

a = True
b = False

print(a and b)  # Skriver ut: False
print(a or b)   # Skriver ut: True
print(not a)    # Skriver ut: False

Kombinere logiske operasjoner:

Vi kan kombinere flere logiske operasjoner for å evaluere mer komplekse betingelser.

Eksempel:

alder = 20
har_lappen = True

if alder >= 18 and har_lappen:
    print("Du kan kjøre bil.")
else:
    print("Du kan ikke kjøre bil.")

2️⃣ Bitoperasjoner i Python 🔄

Bitoperasjoner gir deg muligheten til å manipulere individuelle bits i tall, noe som kan være veldig nyttig i visse typer programmering, som systemprogrammering og kryptering.

Vanlige bitoperasjoner:

  • & (bitwise AND): Setter bitene til 1 hvis begge bitene er 1.
  • | (bitwise OR): Setter bitene til 1 hvis minst én av bitene er 1.
  • ^ (bitwise XOR): Setter bitene til 1 hvis én av bitene er 1, men ikke begge.
  • ~ (bitwise NOT): Inverterer alle bitene.

Eksempel:

a = 60  # 0011 1100
b = 13  # 0000 1101

print(a & b)  # Skriver ut: 12  (0000 1100)
print(a | b)  # Skriver ut: 61  (0011 1101)
print(a ^ b)  # Skriver ut: 49  (0011 0001)
print(~a)     # Skriver ut: -61 (1100 0011)

Skifting av bits:

  • << (venstre skift): Skifter bitene til venstre, noe som tilsvarer å multiplisere med 2.
  • >> (høyre skift): Skifter bitene til høyre, noe som tilsvarer å dele med 2.

Eksempel:

a = 60  # 0011 1100

print(a << 2)  # Skriver ut: 240 (1111 0000)
print(a >> 2)  # Skriver ut: 15  (0000 1111)

3️⃣ Avanserte Operasjoner på Lister 🔄

Fjerne duplikater fra en liste:

Når du har en liste med duplikater og ønsker å fjerne dem, kan du konvertere listen til et sett, da sett automatisk fjerner duplikater.

Eksempel:

liste = [1, 2, 2, 3, 4, 4, 5]
unik_liste = list(set(liste))
print(unik_liste)  # Skriver ut: [1, 2, 3, 4, 5]

Flette to sorterte lister:

Når du har to sorterte lister og ønsker å kombinere dem i en ny sortert liste, kan du gjøre dette ved hjelp av en algoritme som merge sort eller Python innebygde funksjoner.

Eksempel:

liste1 = [1, 3, 5]
liste2 = [2, 4, 6]

kombinert_liste = sorted(liste1 + liste2)
print(kombinert_liste)  # Skriver ut: [1, 2, 3, 4, 5, 6]

List comprehension – en kraftig metode:

List comprehension er en elegant måte å lage lister på med enkle løkker og betingelser.

Eksempel:

tall = [x for x i range(10) hvis x % 2 == 0]
print(tall)  # Skriver ut: [0, 2, 4, 6, 8]

Dette lager en liste med alle partall fra 0 til 9 på én linje.


4️⃣ Sortering med Bubble Sort 🔄

Vi har allerede dekket bubble sort tidligere, men la oss se på noen flere detaljer og variasjoner av algoritmen.

Implementering av bubble sort:

Vi sorterer en liste ved å sammenligne tilstøtende elementer og bytte plass hvis de er i feil rekkefølge. Dette gjentas til listen er sortert.

def bubble_sort(liste):
    n = len(liste)
    for i i range(n):
        for j i range(0, n - i - 1):
            if liste[j] > liste[j + 1]:
                liste[j], liste[j + 1] = liste[j + 1], liste[j]
    return liste

Optimalisert bubble sort:

For å gjøre algoritmen mer effektiv, kan vi legge til en sjekk som avslutter sorteringen tidlig hvis ingen bytter ble gjort i en hel passering.

def optimalisert_bubble_sort(liste):
    n = len(liste)
    for i i range(n):
        sortert = True
        for j i range(0, n - i - 1):
            if liste[j] > liste[j + 1]:
                liste[j], liste[j + 1] = liste[j + 1], liste[j]
                sortert = False
        if sortert:
            break
    return liste

Dette vil redusere antall unødvendige passeringer hvis listen allerede er sortert.


5️⃣ Avansert Datahåndtering: Arbeid med Store Datasett 🗂️

Filhåndtering med store datasett:

Når du jobber med store datasett, er det viktig å være minneeffektiv. Dette kan gjøres ved å lese filen linje for linje eller bruke verktøy som pandas for å jobbe med dataene mer effektivt.

Eksempel på å lese store filer linje for linje:

with open('stor_fil.txt', 'r') as fil:
    for linje i fil:
        behandle_data(linje)

Arbeide med CSV-filer:

CSV-filer (Comma-Separated Values) er et populært format for å lagre store datasett. Python har innebygde verktøy for å jobbe med disse filene.

Eksempel på å lese en CSV-fil:

import csv

with open('data.csv', 'r') as fil:
    reader = csv.reader(fil)
    for rad i reader:
        print(rad)

Du kan også bruke pandas-biblioteket for avansert dataanalyse:

import pandas as pd

data = pd.read_csv('data.csv')
print(data.head())  # Skriver ut de første 5 radene

🧪 Test deg selv!

  1. Lag et program som bruker bitoperasjoner til å bytte to variabler uten å bruke en midlertidig variabel.
  2. Bruk list comprehension til å lage en liste med kvadrater av tall fra 1 til 10.
  3. Optimaliser bubble sort ved å legge til en tidlig stopp hvis listen allerede er sortert.
  4. Les en stor CSV-fil linje for linje og skriv ut hver rad til skjermen.

🎓 Oppsummering:

  • Logiske operasjoner er nyttige for å evaluere betingelser, og bitoperasjoner lar deg manipulere individuelle bits i tall.
  • Vi har sett flere avanserte listeoperasjoner, inkludert å fjerne duplikater, flette lister og bruke list comprehension.
  • Bubble sort kan optimaliseres ved å legge til en sjekk for å avslutte tidlig hvis listen allerede er sortert.
  • Vi har sett hvordan vi kan jobbe med store datasett

en minneeffektiv måte, inkludert å lese store filer linje for linje og jobbe med CSV-filer.


Er du klar for neste steg? I neste modul skal vi gå enda dypere inn i dataanalyse, optimaliseringer og avansert programdesign! 🚀👨‍💻👩‍💻