Listat

Lista on tietorakenne, eli vähän kuin muuttujatyyppi. Sen avulla yhteen muuttujaan voidaan tallentaa monta arvoa.

Lista luodaan hakasuluilla [ ].

In [2]:
lista = []

Muuttujassa on nyt tyhjä lista.

Jos listaan haluaa alussa tietoja, ne erotetaan pilkulla:

In [3]:
lista2 = [3, 4, 5, 6]

Pythonissa lista voi sisältää mitä tahansa muuttujatyyppejä, myös muita listoja. Yleensä kuitenkin yhdessä listassa kannattaa olla vain yhtä muuttujatyyppiä, eli ei esimerkiksi sekoita numeroita ja merkkijonoja.

Listan loppuun voi lisätä alkion append-metodilla:

In [4]:
lista = []
lista.append(0)
lista.append(1)

Listan alkioita voi käsitellä []-merkinnällä, jossa hakasulkujen väliin tulee alkion paikka eli indeksi:

In [5]:
lista = []
lista.append("a")
lista.append("b")
lista.append("c")

print(lista[0])
print(lista[1])
print(lista[2])
a
b
c

Tulostaa a, b, c. Pythonissa listat alkavat nollasta, eli ensimmäisen paikka on 0.

Listan voi järjestää metodilla sort:

In [6]:
lista = [7, 8, 9, 10, 6, 4, 1, 3, 5, 2]

lista.sort()

print(lista)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Tulostaa [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].

Listoja käydään usein läpi for-silmukan avulla:

In [7]:
lista = [7, 8, 9, 10, 6, 4, 1, 3, 5, 2]

for alkio in lista:
    print(alkio)
7
8
9
10
6
4
1
3
5
2

Listaan voi kysyä monta lukua käyttäjältä, esimerkki:

In [8]:
n = int(input("Monenko luvun keskiarvon haluat laskea? "))

lista = []

for i in range(n):
    luku = float(input("Anna luku "))
    lista.append(luku)

summa = 0

for luku in lista:
    summa = summa + luku
print("Keskiarvo on", summa / n)
Monenko luvun keskiarvon haluat laskea? 3
Anna luku 10
Anna luku 15
Anna luku 17
Keskiarvo on 14.0

Listoja voi yhdistää +-merkillä:

In [9]:
print([0, 1, 2] + [3, 4, 5])
[0, 1, 2, 3, 4, 5]

Listan pituuden saa selville len-funktiolla:

In [10]:
lista = [0, 1, 2, 3, 4, 5, 6]
print(len(lista))
7

Tee ohjelma, joka etsii suurimman ja pienimmän luvun listasta:

In [11]:
lista = [7, 8, 11, 10, 6, 4, 108, 3, 55, 22]
lista.sort()

print("Pienin on", lista[0])
print("Suurin on", lista[len(lista) - 1])
Pienin on 3
Suurin on 108

Tehtäviä

Käytä ratkaisuissa listoja. Tehtävät eivät ole vaikeusjärjestyksessä, eli voit laskea ne eri järjestyksessä.

Johdantotehtävä 4.0

Alla on lista, jossa on 100 kappaletta satunnaisia lukuja

a) tee ohjelma joka laskee ja tulostaa listassa olevien lukujen summan.

b) tee ohjelma, joka laskee ja tulostaa listan parillisten lukujen summan.

c) Kirjoita ohjelma, joka tulostaa listan suurimman ja piennimmän luvun.

d) Kirjoita ohjelma, joka kertoo listan kahden peräkkäisen jäsenen suurimman erotuksen.

In [1]:
# Kirjoita ohjelmasi tähän

lista = [932, 168, 876, 250, 426, 231, 554, 105, 888, 684, 639, 131, 140, 382, 479, 402, 125, 264, 286, 290, 205, 944, 761, 735, 611, 646, 908, 438, 852, 937, 397, 503, 591, 736, 734, 124, 434, 952, 269, 13, 164, 161, 128, 170, 646, 200, 331, 946, 590, 973, 569, 784, 778, 358, 463, 712, 283, 357, 959, 598, 518, 853, 305, 767, 44, 135, 175, 407, 677, 749, 714, 517, 766, 346, 488, 687, 338, 375, 341, 582, 912, 389, 224, 326, 561, 106, 756, 709, 445, 106, 727, 258, 671, 48, 857, 69, 171, 840, 335, 696]


summa = 0

for luku in lista:
    summa += luku
print(summa)
49202
In [20]:
summa_parillinen = 0
summa_pariton = 0

for luku in lista:
    if luku % 2 == 0:
        summa_parillinen += luku
    else:
        summa_pariton += luku

print("Parillisten lukujen summa: ", summa_parillinen)
print("Parittomien lukujen summa: ", summa_pariton)
Parillisten lukujen summa:  27452
Parittomien lukujen summa:  21750
In [28]:
suurin = lista[0]
pienin = lista[0]


for luku in lista:
    if luku > suurin:
        suurin = luku

    if luku < pienin:
        pienin = luku

print("Suurin luku on", suurin)
print("Pienin luku on", pienin)

lista.sort()

print("Pienin luku on", lista[0])
print("Suurin luku on", lista[-1])
Suurin luku on 973
Pienin luku on 13
Pienin luku on 13
Suurin luku on 973
In [2]:
lista = [932, 168, 876, 250, 426, 231, 554, 105, 888, 684, 639, 131, 140, 382, 479, 402, 125, 264, 286, 290, 205, 944, 761, 735, 611, 646, 908, 438, 852, 937, 397, 503, 591, 736, 734, 124, 434, 952, 269, 13, 164, 161, 128, 170, 646, 200, 331, 946, 590, 973, 569, 784, 778, 358, 463, 712, 283, 357, 959, 598, 518, 853, 305, 767, 44, 135, 175, 407, 677, 749, 714, 517, 766, 346, 488, 687, 338, 375, 341, 582, 912, 389, 224, 326, 561, 106, 756, 709, 445, 106, 727, 258, 671, 48, 857, 69, 171, 840, 335, 696]


suurin_erotus = 0

kohta = 0

for i in range(len(lista) - 1):
    if suurin_erotus < lista[i + 1] - lista[i]:
        suurin_erotus = lista[i + 1] - lista[i]
        kohta = i

print(suurin_erotus, "kohdassa", kohta)
809 kohdassa 93

Tehtävä 4.1

Alla tilastomatikan kaavoja käsitteitä.

Moodi eli tyyppiarvo on havaintoaineistossa useimmiten esiintyvä arvo.

mediaani = Satunnaismuuttujan keskimmäinen arvo, jos arvot lueteltu peräkkäin. Mediaanin kohdalla suhteellinen summafrekvenssi ylittää 50%ia.

Alla olevassa koodissa taulukko lkm esittää lukiolaisten päivittäin seuraamien uutissivustojen lukumäärää. Taulukossa frekvenssi on esitetty jakauma miten lukiolaiset vastasivat uutissivustojen lukumäärää selvittävään kyselyyn.

Ohjelma tulostaa kuinka monta lukiolaista kyselyyn osallistui. Ohjelma tulostaa seurattujen uutissivustojen lukumäärän tyyppiarvon ja mediaanin ja kuinka moni seurasi suosituinta sivustoa.

In [26]:
# kirjoita vastauksesi tähän
lkm = [0, 1, 2, 3, 4]
frekvenssi = [15, 55, 45, 30, 5]


summa = 0
for luku in frekvenssi:
    summa += luku
print('osallistujia:', summa)

vastaukset = []
for i in range(len(lkm)):
    vastaukset += [lkm[i]] * frekvenssi[i]
vastaukset.sort()

mediaani1 = vastaukset[len(vastaukset) // 2 - 1]
mediaani2 = vastaukset[len(vastaukset) // 2]
print('mediaani:',(mediaani1 + mediaani2) / 2,'seurattua uutissivustoa')

suurin = frekvenssi[0]
kohta = 0
suurin_kohta = 0

for luku in frekvenssi:
    if luku > suurin:
        suurin = luku
        suurin_kohta = kohta
    kohta += 1
print('eniten seuraajia:', suurin, 'kpl', ', kun oli uutissivustojen lkm oli:', lkm[suurin_kohta])
osallistujia: 150
mediaani: 2.0 seurattua uutissivustoa
eniten seuraajia: 55 kpl , kun oli uutissivustojen lkm oli: 1

Tehtävä 4.2

Taulukossa on esitetty kahden koulun A ja B arvosanojen jakaumat. Ohjelma laskee arvosanojen keskiarvot molemmissa kouluissa. Ohjelma etsii koulun A parhaimman arvosanan.

In [17]:
# laadi ratkaisusi tähän, voit käyttää alla olevia valmiita muuttujia
arvosanat = [10, 9, 8, 7, 6, 5, 4]
frekvenssi_A = [0, 12, 27, 29, 4, 9, 0]
frekvenssi_B = [24, 28, 32, 16, 7, 17, 1]

summa_A = 0
summa_B = 0

määrä_A = 0
määrä_B = 0

for i in range(len(arvosanat)):
    summa_A += arvosanat[i] * frekvenssi_A[i]
    summa_B += arvosanat[i] * frekvenssi_B[i]

    määrä_A += frekvenssi_A[i]
    määrä_B += frekvenssi_B[i]

keskiarvo_A = summa_A / määrä_A
keskiarvo_B = summa_B / määrä_B

print("keskiarvo koulussa A on", keskiarvo_A)
print("keskiarvo koulussa B on", keskiarvo_B)

if keskiarvo_A > keskiarvo_B:
    print("Koulu A oli matikassa parempi.")
else:
    print("Koulu B oli matikassa parempi.")

print("Koulussa A on", määrä_A, "opiskelijaa")
print("Koulussa B on", määrä_B, "opiskelijaa")

suurin = 0
for i in range(len(arvosanat)):
    if frekvenssi_A[i] != 0:
        if arvosanat[i] > suurin:
            suurin = arvosanat[i]
print(suurin)
keskiarvo koulussa A on 7.3580246913580245
keskiarvo koulussa B on 7.928
Koulu B oli matikassa parempi.
Koulussa A on 81 opiskelijaa
Koulussa B on 125 opiskelijaa
9

Tehtävä 4.3

Ohje: Laske ensin sadepäivien keskiarvo. Todennäiköisyys saadaan laskettua sadepäivien keskiarvon suhteellisena osuutena 31 vuorokaudesta.

In [27]:
# kirjoita ratkaisusi tähän
sadepaivat = [8, 12, 9, 6, 10, 9]

summa = 0

for maara in sadepaivat:
    summa += maara

keskiarvo = summa / len(sadepaivat)

print("Todennäköisyys, että tiettynä päivänä sataa, on", round(keskiarvo / 31 * 100, 1), "%")
Todennäköisyys, että tiettynä päivänä sataa, on 29.0 %
In [ ]: