P1 – Kapitel 6

Datastrukturer

Datastrukturer

List

En lista är en samling element i en viss ordning. Innehållet kan vara bokstäver, siffror eller andra tecken. Namnet på listan bör vara i plural eftersom man oftast har mer än ett element i en lista. Man känner igen en lista med hakparanteserna (på eng. brackets) [ ]. Skriver du ut en lista får listan inom [ och ] men ett , mellan elementen. Skapa filen list-planeter.py

#list-planeter.py
planeter = ['Merkurius', 'Venus', 'Jorden', 'Mars', 'Jupiter', 'Saturnus', 'Uranus', 'Neptunus']
print(planeter)
Exempel på utskrift

[‘Merkurius’, ‘Venus’, ‘Jorden’, ‘Mars’, ‘Jupiter’, ‘Saturnus’, ‘Uranus’, ‘Neptunus’]

Man kan komma elementen i en lista genom att säga vilket index ett visst element har. Kom ihåg att man startar på noll när man numrerar index. Index 0 har Merkurius, Index 1 har Venus, osv. Man kan även välja element från andra hållet. Tänk dig att du har en väldigt lång lista och vill använda det sista elementet. Skriv [-1].

#list-planeter.py
planeter = ['Merkurius', 'Venus', 'Jorden', 'Mars', 'Jupiter', 'Saturnus', 'Uranus', 'Neptunus']
print(planeter[0])
print(planeter[-1])
Exempel på utskrift

Merkurius
Neptunus

Man kan använda metoder som exempelvis title() som användes i kapitel 2, om man vill ha stor bokstav på strängelement som inte ha det innan.

#list-planeter.py
planeter =['merkurius', 'veuns', 'jorden', 'mars', 'jupiter', 'saturnus', 'uranus', 'neptunus']
print(planeter[2].title()) 
Exempel på utskrift

Jorden

Övningar

Övning 6.1

Skapa en fil list-kontinenter.py. Gör en lista på kontinenterna. Exempelvis Afrika’, ‘Afrika’, ‘Asien’, ‘Europa’, ‘Nordamerika’, ‘Oceanien’, ‘Sydamerika’, ‘Antarktis’. Kalla listan för kontinenter. Skriv ut det näst sista elementet. Skriv ut det tredje elementet

För att plocka ut eller flera värden ur en lista kan man göra så här. Skapa filen list-planeter-utskrift.py

#list-planeter-utskrift.py
planeter = ['Merkurius', 'Venus', 'Jorden', 'Mars', 'Jupiter', 'Saturnus', 'Uranus', 'Neptunus']
print("Ända planeten med liv vad vi känner till "+ planeter[2]) 
print("Solsystemets gasjättar är "+ planeter[-1].title() + ", " + planeter[-2].title() + ", " + planeter[-3].title() + ", " + planeter[-4].title()) 
Exempel på utskrift

Ända planeten med liv vad vi känner till är Jorden
Solsystemets gasjättar är Neptunus, Uranus, Saturnus och Jupiter

Många listor kommer troligen att ändras när programmet kör. Man vill kanske byta ut ett element mot ett annat. Skapa filen list-frukter.py

#list-frukter.py
frukter = ['banan', 'äpple', 'apelsin']
print(frukter)
frukter[0] = 'citron'
print(frukter)
Exempel på utskrift

[‘banan’, ‘äpple’, ‘apelsin’]
[‘citron’, ‘äpple’, ‘apelsin’]

För att lägga tillvärden används .append() på listan. Fortsätt på filen list-frukter.py

#list-frukter.py
frukter = ['banan', 'äpple', 'apelsin']
print(frukter)
frukter[0] = 'citron'
print(frukter)
frukter.append('mango')
frukter.append('ananas')
print(frukter)

Exempel på utskrift

[‘banan’, ‘äpple’, ‘apelsin’]
[‘citron’, ‘äpple’, ‘apelsin’]
[‘citron’, ‘äpple’, ‘apelsin’, ‘mango’, ‘ananas’]

Ibland behöver man lägga in element inne i en lista. Då behöver man insert(index, element). Fortsätt på #list-frukter.py. I exemplet nedan vill jag ha in päron på den andra platsen, alltså index 1, därför skriver jag frukter.insert(1, ‘päron’). Då puttas alla element efter päron till höger ett steg.

#list-frukter.py
frukter = ['banan', 'äpple', 'apelsin']
print(frukter)
frukter[0] = 'citron'
print(frukter)
frukter.append('mango')
frukter.append('ananas')
print(frukter)
frukter.insert(1, 'päron')
print(frukter)
Exempel på utskrift

[‘banan’, ‘äpple’, ‘apelsin’]
[‘citron’, ‘äpple’, ‘apelsin’]
[‘citron’, ‘äpple’, ‘apelsin’, ‘mango’, ‘ananas’]
[‘citron’, ‘päron’, ‘äpple’, ‘apelsin’, ‘mango’, ‘ananas’]

För att ta bort element i en lista skriver man del listan[index]. Så om jag vill ta bort päron skriver jag del frukter[1]. Uppdatera list-frukter.py med del

#list-frukter.py
frukter = ['banan', 'äpple', 'apelsin']
print(frukter)
frukter[0] = 'citron'
print(frukter)
frukter.append('mango')
frukter.append('ananas')
print(frukter)
frukter.insert(1, 'päron')
print(frukter)
del frukter[1]
print(frukter)

Exempel på utskrift

[‘banan’, ‘äpple’, ‘apelsin’]
[‘citron’, ‘äpple’, ‘apelsin’]
[‘citron’, ‘äpple’, ‘apelsin’, ‘mango’, ‘ananas’]
[‘citron’, ‘päron’, ‘äpple’, ‘apelsin’, ‘mango’, ‘ananas’]
[‘citron’, ‘äpple’, ‘apelsin’, ‘mango’, ‘ananas’]

Det händer att man vill använda ett element som man plockat bort. Skapa filen list-frukter-pop.py. Vi skriven i tre frukter när vi använder pop() på listan tas det sista elementet bort från listan och lagras i variabeln poppad_frukt. Man kan använda detta när man exempelvis har element som är lagrade i kronologisk ordning, alltså efter hur gamla de är. Man kan även ta bort ett element var man vill i listan med pop(index). Man kan också ta bort ett visst element genom att .remove(‘textsträng’). Exempelvis frukter.remove(‘äpple’)


frukter = ['banan', 'äpple', 'päron', 'citron', 'apelsin']
print(frukter)
poppad_frukt = frukter.pop()
print(frukter)
print(poppad_frukt)

poppad_frukt_index_2 = frukter.pop(2)
print(poppad_frukt_index_2)
print(frukter)

frukter.remove('äpple')
print(frukter)

Exempel på utskrift

[‘banan’, ‘äpple’, ‘päron’, ‘citron’, ‘apelsin’]
[‘banan’, ‘äpple’, ‘päron’, ‘citron’]
apelsin
päron
[‘banan’, ‘äpple’, ‘citron’]
[‘banan’, ‘citron’]
Övningar

Övning 6.2

1) Gör en pioriteringslista på vilka programmeringsspråk du vill lära dig. Kalla filen list-progsprak.py
Kommer du inte på några språk kan du använda dessa ‘java’, ‘c#’, ‘python’, ‘assembly’, ‘php’, ‘javascript’, ‘swift’
Börja med exempelvis ‘java’, ‘c#’, ‘python’, ‘assembly’. Kalla listan för lang
Skriv ut listan på olika plaster i koden så du kan kontrollera att listan blir rätt

2) Det sista språket blir för svprt att lära sig. Ta bort det med del

3) Du glömde ett språk som används till iOS appar, swift, infoga det på andra platsen, alltså index 1. Använd insert(index, ‘språk’)

4) Du hjärnstormar och lägger till två programmeringsspråk till som du lägger till sist med .append. Exempelvis: php, javascript

5) Du inser ditt misstag och vill byta plats med första och fjärde språket. Använd exemeplvis pop två gånger och insert två gånger. Vilka indexvärden ska du sätta i pop(index) och i lang.insert(index, element)?


Exempel på utskrift om du valde mina språk

[‘java’, ‘c#’, ‘python’, ‘assembly’]
[‘java’, ‘c#’, ‘python’]
[‘java’, ‘swift’, ‘c#’, ‘python’]
[‘java’, ‘swift’, ‘c#’, ‘python’, ‘php’, ‘javascript’]
[‘python’, ‘swift’, ‘c#’, ‘java’, ‘php’, ‘javascript’]

Sortera listor

När man sorterar en lista använder man inbyggd färdig sorteringalgoritm i sortmetoden. Man behöver inte veta hur algoritmen fungerar bara vilka värden man ska mata in för att få sorteringen på rätt sätt.

Skapa filen frukter-sortera.py. Tänk på att metoden lista.sort() ändrar ordningen i listan permanent. Vill du sortera listan åt andra hållet permanent skriver du lista.sort(reverse=True).

Om du inte vill ändra listans ordning men ändå sortera listan tillfälligt skriver du sorted(lista).

Det kan vara användbart att veta hur många element som finns i en lista. Om du sätter len franför listan får du antalet element i listan. I vårt exempel skriver du len(frukt)

#frukter-sortera.py
frukter = ['banan', 'äpple', 'päron', 'citron', 'apelsin']
print("Permanent sortera en lista")
print("----------------------")
print("Start lista")
print(frukter)
print("Permanent sorterad lista med .sort()")
frukter.sort()
print(frukter)
print("Permanent sorterad lista med .sort(reverse=True)")
frukter.sort(reverse=True)
print(frukter)
print("När man skrivet ut listan med print får man den senaste versionen")
print(frukter)
print("***********************")
print("Tillfälligt sortera en lista")
print("----------------------")
frukter = ['banan', 'äpple', 'päron', 'citron', 'apelsin']
print("Start lista")
print(frukter)
print("Tillfälligt sorterad lista med sorted()")
print(sorted(frukter))
print("Startlistan är samma som innan när man skriver ut listan med print")
print(frukter)
print("Antalet element i listan")
print(len(frukter))
Exempel på utskrift

Permanent sortera en lista
———————-
Start lista
[‘banan’, ‘äpple’, ‘päron’, ‘citron’, ‘apelsin’]
Permanent sorterad lista med .sort()
[‘apelsin’, ‘banan’, ‘citron’, ‘päron’, ‘äpple’]
Permanent sorterad lista med .sort(reverse=True)
[‘äpple’, ‘päron’, ‘citron’, ‘banan’, ‘apelsin’]
När man skrivet ut listan med print får man den senaste versionen
[‘äpple’, ‘päron’, ‘citron’, ‘banan’, ‘apelsin’]
***********************
Tillfälligt sortera en lista
———————-
Start lista
[‘banan’, ‘äpple’, ‘päron’, ‘citron’, ‘apelsin’]
Tillfälligt sorterad lista med sorted()
[‘apelsin’, ‘banan’, ‘citron’, ‘päron’, ‘äpple’]
Startlistan är samma som innan när man skriver ut listan med print
[‘banan’, ‘äpple’, ‘päron’, ‘citron’, ‘apelsin’]
Antalet element i listan
5
Övningar

Övning 6.3
Kopiera list-progsprak-sort.py och spara den nya filen som list-progsprak-sort.py. Du bestämmer sig för att sortera programmeringsspråken i bokstavsordning vill dels sortera listan tillfälligt coh ta reda på hur många programmeringsspråk du lagt in. Lägg till i programmet så din lista utför detta.

Övning 6.4
Tänk ut någor som kan lagras i en lista. Skapa en listan i ett nytt program. Använd funktionerna som du lärt dig här minst en gång i listan

Loopa genom en lista

Tidigare har du sett hur man kan skriva ut hela listan på en gång. Man kan också skriva ut ett element i listan i taget med en for-loop. Skapa filen #list-loop.py. For loopen går igenom listan planeter ett element, som kallas planet här, i taget. Det var därför det var bra att skriva i plural: planeter. Nu behöver vi använda sigular: planet för att döpa elementet i for-loopen.

Om man vill att programmet ska fortsätta efter loopen, glöm inte att skriva det utan indrag. Allt som är indraget efter for-satsen, ingår i for-satsen. Tänk även på kolonet(:) i stutet på for loopen

planeter = ['Merkurius', 'Venus', 'Jorden', 'Mars', 'Jupiter', 'Saturnus', 'Uranus', 'Neptunus']
for planet in planeter:
    print(planet)

print('Detta var solsystemets åtta planeter')
Exempel på utskrift

Merkurius
Venus
Jorden
Mars
Jupiter
Saturnus
Uranus
Neptunus
Detta var solsystemets åtta planeter

I kapitel 3 användes range() i for loopar för att köra loopen olika antal gånger. Man kan också skapa listor med range()

#loop-tal.py
#tal 1-6
tal = list(range(1,5))
print(tal)

#jämna tal mellan 1-10
tal = list(range(0,11,2))
print(tal)
Exempel på utskrift

[1, 2, 3, 4]
[0, 2, 4, 6, 8, 10]
Övningar

Övning 6.5
Skapa en lista med alla udda tal mellan 1-20

Övning 6.6
Skapa en lista med hjälp av range() med talen 1, 4, 9, 16, 25, 36, 49, 64, 81, 100
Tips använd tal**2

Om man har en lång lista och vill veta största och minsta värdet eller summan används max(), min() och sum(). Skapa programmet list-tal.py.

#list-tal.py
tal = [3,6,4,11,6,4,2,4,5,9]
print(min(tal))
print(max(tal))
print(sum(tal))
Exempel på utskrift

2
11
54
Övningar

Övning 6.7
Summera talen 1-100. Använd en for loop för att skapa talen och sum() för att summera dem.

Tupel

En tupel är en lista som du inte kan ändra innehållet i. Man skriver på liknade sätt som när man gör en lista, men med () istället för []. I filen tupel_ex1.py jämförs en lista med en tupel

#tupel_ex1.py
#tupel_ex1
en_tupel = (2, 5 , 6)
en_lista = [2, 5 , 6]

print(en_tupel)
print(en_lista)

print(en_tupel[0])

print(en_lista[0])

Exempel på utskrift

(2, 5, 6)
[2, 5, 6]
2
2

Om man nu försöker ändra ett element i tupel får man ett fel: “TypeError: ‘tupel’ object does not support item assignment
Detta är en lista: [10, 5, 6]”. Det går att ändra värdet i listan som vanligt. Man kan avända tubles när man vill lagra värden som inte ska gå att ändra ett taget.

#tupel_ex2
en_tupel = (2, 5 , 6)
en_lista = [2, 5 , 6]

en_lista[0] = 10
print("Detta är en lista:",(en_lista))

en_tupel[0] = 10
print("Detta är en tupel:",(en_tupel))
Exempel på utskrift

Traceback (most recent call last):
File “/Users/paul/map/python/Programmering1/Kap 6/tupel-ex2.py”, line 8, in
en_tupel[0] = 10
TypeError: ‘tupel’ object does not support item assignment
Detta är en lista: [10, 5, 6]

Tänk på att man kan ändra hela tupeln.

#tupel_ex3
en_tupel = (2, 5 , 6)
print("Detta är en tupel:",(en_tupel))

en_tupel = (10, 8, 7)
print("Detta är en tupel:",(en_tupel))
Exempel på utskrift

Detta är en tupel: (2, 5, 6)
Detta är en tupel: (10, 8, 7)

Dictionary

En dictionary (jag använder det engelska ordet då lämplig översättning saknas) ser ut som i dic_1.py

#dic_1.py
dic = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
print(dic)

#Om man vill starta med en tom dictionary
personer = {}
print(personer)

#Dictionary med personer: födelsedag
personer = {'Bertil': 891110, 'Cecilia': 870520, 'Adam': 880213}
print(personer)

#skriva ut
print(personer['Bertil'])

#lägga till ett elemet i en dictionary
personer['David'] = 830802
print(personer)

#hur man ändrar ett elemensts födelsedag
personer['Bertil'] = 890110
print(personer)

#ta bort ett element
del(personer['Adam'])
print(personer)

#Hur man kan skriva ut key, value i en dictionary
for k, v in personer.items():
    print(k,  "född: ", v)

#Man kan ha olika datatyper lagrade i samma dictionary
person_data = {'eye_color': 'blue', 'age': 31, 'height': 1.81}
print(person_data)

Exempel på utskrift

{‘key1’: ‘value1’, ‘key2’: ‘value2’, ‘key3’: ‘value3’}
{}
{‘Bertil’: 891110, ‘Cecilia’: 870520, ‘Adam’: 880213}
891110
{‘Bertil’: 891110, ‘Cecilia’: 870520, ‘Adam’: 880213, ‘David’: 830802}
{‘Bertil’: 890110, ‘Cecilia’: 870520, ‘Adam’: 880213, ‘David’: 830802}
{‘Bertil’: 890110, ‘Cecilia’: 870520, ‘David’: 830802}
Bertil född: 890110
Cecilia född: 870520
David född: 830802
{‘eye_color’: ‘blue’, ‘age’: 31, ‘height’: 1.81}

Process finished with exit code 0

Övningar

Övning 6.8
Skapa en dictionary på några personuppgifter om dig. Skriv ut dem med en for-lop och k, v som i dic_1.py

Övning 6.9
Skapa en ordlista med fem Pythontermer som du lärt dig. Key-värdet ska vara temen tex ‘tuple’ och value-värdet ska innehålla förklaringen.