Lisää merkkijonoista ja listoista
Olemme käyttäneet aiemmin []
-syntaksia merkkijonon osajonon erottamiseen:
mjono = "esimerkki"
print(mjono[3:7])
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])
[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])
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])
Kirjoita merkkijono: esimerkki ikkremise
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:
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

mjono = "Moi"
mjono = mjono + "!"

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))
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)
Hei kaikki
Metodi korvaa kaikki merkkijonon esiintymät:
lause = "hei heilan löysin minä heinikosta hei"
print(lause.replace("hei", "HEI"))
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)
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)
Java on kivaa
Vastaa lopuksi osion loppukyselyyn: