Lista on tietorakenne, eli vähän kuin muuttujatyyppi. Sen avulla yhteen muuttujaan voidaan tallentaa monta arvoa.
Lista luodaan hakasuluilla [ ].
lista = []
Muuttujassa on nyt tyhjä lista.
Jos listaan haluaa alussa tietoja, ne erotetaan pilkulla:
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:
lista = []
lista.append(0)
lista.append(1)
Listan alkioita voi käsitellä []-merkinnällä, jossa hakasulkujen väliin tulee alkion paikka eli indeksi:
lista = []
lista.append("a")
lista.append("b")
lista.append("c")
print(lista[0])
print(lista[1])
print(lista[2])
Tulostaa a, b, c. Pythonissa listat alkavat nollasta, eli ensimmäisen paikka on 0.
Listan voi järjestää metodilla sort:
lista = [7, 8, 9, 10, 6, 4, 1, 3, 5, 2]
lista.sort()
print(lista)
Tulostaa [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].
Listoja käydään usein läpi for-silmukan avulla:
lista = [7, 8, 9, 10, 6, 4, 1, 3, 5, 2]
for alkio in lista:
print(alkio)
Listaan voi kysyä monta lukua käyttäjältä, esimerkki:
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)
Listoja voi yhdistää +-merkillä:
print([0, 1, 2] + [3, 4, 5])
Listan pituuden saa selville len-funktiolla:
lista = [0, 1, 2, 3, 4, 5, 6]
print(len(lista))
Tee ohjelma, joka etsii suurimman ja pienimmän luvun listasta:
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])
Käytä ratkaisuissa listoja. Tehtävät eivät ole vaikeusjärjestyksessä, eli voit laskea ne eri järjestyksessä.
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.
# 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)
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)
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])
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)
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.
# 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])
Taulukossa on esitetty kahden koulun A ja B arvosanojen jakaumat. Ohjelma laskee arvosanojen keskiarvot molemmissa kouluissa. Ohjelma etsii koulun A parhaimman arvosanan.
# 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)
Ohje: Laske ensin sadepäivien keskiarvo. Todennäiköisyys saadaan laskettua sadepäivien keskiarvon suhteellisena osuutena 31 vuorokaudesta.
# 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), "%")