Osa 4

Lisää merkkijonoista ja listoista

Olemme käyttäneet aiemmin []-syntaksia merkkijonon osajonon erottamiseen:

mjono = "esimerkki"
print(mjono[3:7])
Esimerkkitulostus

merk

Sama syntaksi toimii myös listoissa, ja voimme erottaa sen avulla listan osan:

lista = [3,4,2,4,6,1,2,4,2]
print(lista[3:7])
Esimerkkitulostus

[4, 6, 1, 2]

Lisää erottamisesta

Itse asiassa []-syntaksi toimii hyvin samalla periaatteella kuin range-funktio, eli voimme antaa sille myös askeleen:

mjono = "esimerkki"
print(mjono[0:7:2])
lista = [1,2,3,4,5,6,7,8]
print(lista[6:2:-1])
Esimerkkitulostus

eiek [7, 6, 5, 4]

Jos emme anna jotain arvoa, oletuksena koko sisältö valitaan mukaan. Tämän avulla voimme tehdä seuraavan lyhyen ohjelman, joka kääntää merkkijonon:

mjono = input("Kirjoita merkkijono: ")
print(mjono[::-1])
Esimerkkitulostus

Kirjoita merkkijono: esimerkki ikkremise

Loading

Merkkijonoa ei voi muuttaa

Merkkijonoilla ja listoilla on paljon yhteistä, ja useimmat operaatiot toimivat samalla tavalla sekä merkkijonoille että listoille. Kuitenkin erona on, että merkkijonoa ei voi muuttaa. Esimerkiksi seuraava koodi ei toimi tarkoitetulla tavalla:

mjono = "esimerkki"
mjono[0] = "a"

Koska merkkijonoa ei voi muuttaa, ohjelman suoritus aiheuttaa virheen:

Esimerkkitulostus

TypeError: 'str' object does not support item assignment

Samankaltainen virhe seuraa, jos yritetään esimerkiksi järjestää merkkijonoa järjestykseen sort-metodilla.

Vaikka merkkijonoa ei voi muuttaa, voimme silti sijoittaa merkkijonon paikalle toisen merkkijonon.

Onkin tärkeää huomata ero seuraavien esimerkkien välillä:

lista = [1,2,3]
lista[0] = 10
4 4 1
mjono = "Moi"
mjono = mjono + "!"
4 4 2

Ensimmäisessä esimerkissä listan sisältö muuttuu. Toisessa esimerkissä alkuperäinen merkkijono korvataan toisella merkkijonolla. Alkuperäinen merkkijono jää muistiin, mutta siihen ei enää ole viittausta, joten sitä ei voi enää käyttää ohjelmassa.

Tähän palataan tarkemmin ensi viikolla, kun puhutaan listojen käytöstä funktioiden parametreina ja paluuarvoina.

Lisää metodeita

Metodin count avulla voidaan laskea osajonon esiintymien määrä. Metodi toimii samaan tapaan sekä merkkijonon että listan kanssa. Esimerkiksi näin:

mjono = "Vesihiisi sihisi hississä"
print(mjono.count("si"))

lista = [1,2,3,1,4,5,1,6]
print(lista.count(1))
Esimerkkitulostus

5 3

Huomaa, että metodi count ei laske päällekkäisiä esiintymiä. Esimerkiksi metodin mukaan merkkijonossa aaaa esiintyy kaksi kertaa osajono aa, vaikka oikeastaan esiintymiä olisi kolme, jos päällekkäiset esiintymät sallitaan.

Metodin replace avulla voidaan muodostaa uusi merkkijono, jossa tietty merkkijono on korvattu toisella merkkijonolla. Esimerkiksi:

mjono = "Moi kaikki"
uusi = mjono.replace("Moi", "Hei")
print(uusi)
Esimerkkitulostus

Hei kaikki

Metodi korvaa kaikki merkkijonon esiintymät:

lause = "hei heilan löysin minä heinikosta hei"
print(lause.replace("hei", "HEI"))
Esimerkkitulostus

HEI HEIlan löysin minä HEInikosta HEI

Tyypillinen virhe replace-metodia käytettäessä on unohtaa, että merkkijonot ovat muuttumattomia:

mjono = "Python on kivaa"

# Korvataan alijono, muttei tallenneta tulosta mihinkään...
mjono.replace("Python", "Java")
print(mjono)
Esimerkkitulostus

Python on kivaa

Jos vanhaa jonoa ei tarvita, voidaan uusi jono sijoittaa samaan muuttujaan:

mjono = "Python on kivaa"

# Korvataan alijono, tallennetaan tulos samaan muuttujaan
mjono = mjono.replace("Python", "Java")
print(mjono)
Esimerkkitulostus

Java on kivaa

Loading
Loading
Loading
Loading
Loading
Loading
:
Loading...
:
Loading...

Kirjaudu sisään nähdäksesi tehtävän.

Vastaa lopuksi osion loppukyselyyn:

:
Loading...
:
Loading...

Kirjaudu sisään nähdäksesi tehtävän.