Python: listojen käsittelyä 2

Tässä artikkelissa käyn läpi, miten alkioita poistetaan listalta. Listojen käsittelyä 1 -sivulla kertoilin, miten alkioita voidaan lisätä listaan.

Kaikkien alkioiden poistaminen listalta yhdellä kertaa

Kun halutaan tyhjentää lista yhdellä kertaa kaikista alkioista, tähän löytyy eri tapoja, joista käsittelen kaksi. Metodi clear tyhjentää listan kertarykäisyllä.

lista = [1, 2, 3, 4, 5]
lista.clear()
print(lista)
[]

Saman asian ajaa del lista[:]. Tässä koodissa lista[:] tarkoittaa koko listan, sen kaikkien alkioiden valitsemista.

lista = ["pippuri", "oregano", "basilika", "rakuuna", "curry"]
del lista[:]
print(lista)
[]

Yksittäisen alkion poistaminen listalta

Kun tiedämme, minkä alkion haluamme poistaa listalta, voimme käyttää remove-metodia. Alla olevaan mausteet-listaan on erehdyksessä joutunut yksi aines, joka vaikkakin saattaisi hieman ”maustaa” ruokaa, voisi aiheuttaa myös kalliin matkan hammaslääkäriin. 😉 Se on siis poistettava listalta.

mausteet = ["basilika", "oregano", "mutteri", "rakuuna", "curry"]
mausteet.remove("mutteri")
print(mausteet)
['basilika', 'oregano', 'rakuuna', 'curry']

HUOM! Remove-metodi poistaa listalta vain ensimmäisen parametrin mukaisen alkion. Jos listalla olisi toinen mutteri, se jäisi sinne. Jos epäilemme, että listalla on muttereita enemmänkin, ja haluamme poistaa ne kaikki, niin silloin voimme käyttää for-silmukkaa ja käydä mausteet-listaa läpi alkio alkiolta ja poistaa mutterit sitä mukaa listalta.

mausteet = ["basilika", "oregano", "mutteri", "rakuuna", "mutteri", "curry", "mutteri", "mutteri"]

for alkio in mausteet:
----if "mutteri" in mausteet:
--------mausteet.remove("mutteri")

print(mausteet)
['basilika', 'oregano', 'rakuuna', 'curry']

Kun haluamme poistaa alkion tietystä paikasta, voimme käyttää pop-metodia. Meidän ei siis tarvitse tietää alkiota, ainoastaan sen paikka listassa, esim. nimet[2], eli haluamme poistaa nimet-listalta alkion paikasta 2, ja kukas sitten joutuu leikistä pois. Katsotaan…

nimet = ["Ana", "Carlos", "Jorge", "Eva", "Pedro"]
nimet.pop(2)
print(nimet)
['Ana', 'Carlos', 'Eva', 'Pedro']

¡Adiós, Jorge! 😀
Kun Jorge on poistettu listalta, sen jälkeen tulevien paikat siirtyvät yhden askeleen eteenpäin. Evan paikka muuttuu siis 3:sta 2:ksi ja Pedron 4:stä 3:ksi.

Jos kuitenkin haluamme säilyttää Jorgen varalla, voimme palauttaa hänet omaan muuttujaan (tässä esimerkiksi varalla-nimiseen).

nimet = ["Ana", "Carlos", "Jorge", "Eva", "Pedro"]
varalla = nimet.pop(2)
print(nimet)
['Ana', 'Carlos', 'Eva', 'Pedro']
print(varalla)
Jorge

Listan alkion korvaaminen toisella alkiolla

Alkion voi poistaa myös siten, että korvaa sen jollain toisella alkiolla.

nimet = ["Ana", "Carlos", "Jorge", "Eva", "Pedro"]
nimet[2] = "Javier"
print(nimet)
['Ana', 'Carlos', 'Javier', 'Eva', 'Pedro']

Eli Javier pääsi kentälle Jorgen tilalle, ja Jorge joutui filttiketjuun. 😀


Tässä toinen Python-listoja käsittelevä artikkeli. Jos löysit virheitä tai muuta kommentoitavaa, heitä minua sähköpostiviestillä. 😀


PS. For-silmukssa olen käyttänyt sisennykseen valkoisia tavuviivoja, jotka eivät kuulu koodiin, vaan siinä kuuluisi olla pelkkä sisennys. Span class -sisennys ei suostu toimimaan  WordPressissä, ainakaan minulla, joten on tyydyttävä tällaiseen kepuliratkaisuun.  😉

Python: listojen käsittelyä 1

Tässä artikkelissa käydään läpi Pythonin listojen peruskäsittelyyn liittyvää tilannetta eli alkioiden lisäämistä listaan. Pythonissa listoihin voi tallentaa erilaista tietoa, kuten kokonais- ja liukulukuja, merkkijonoja ja tupleja sekä sanakirjoja. Listan alkioina voi olla myös muita listoja. Listan alkiot tallennetaan hakasulkujen [ ] sisään.
Esimerkkejä:
kokonaislukuja = [1, 5, 9, 205, 4]
liukulukuja = [1.34, 2.01, 75.3, 23.55]
merkkijonoja = ["mekko", "hame", "housut", "hattu", "vaatteita arkeen"]
tuplelista = [(1 , 4), (1.45, 7.5), (90, 54.3)]
sanakirjalista = [{1: "kuusi"}, {2: "koivu"}, {3: "saarni"}]
listalista = [[1, 2, 5], [3, 4, 6], [21, 3, 5]]
sekalista = ["terve taas", 3, [3, 6]]

Pythonin listaan voi lisätä uusia alkiota, listasta voi poistaa alkiota, ja listan alkioita voi järjestellä eri järjestykseen. Lista on siis varsin joustava väline tiedon käsittelyyn.

Alkion lisääminen listaan viimeiseksi

Alkioita voi lisätä listaan eri tavoin. Jos haluamme lisätä alkion listan loppuun, se käy append-metodilla. Esimerkissä listan viimeiseksi lisätään luku 13.

lista = [2, 5, 9, 11]
lista.append(13)
print(lista)
[2, 5, 9, 11, 13]

Toinen vähemmän käytetty tapa toimii samalla tavoin. HUOM! lista += 17 ei toimi, vaan tässä tarvitaan nuo hakasulut lisättävän alkion ympärille.

lista = [3, 6, 8, 10]
lista += [17]
print(lista)
[3, 6, 8, 10, 17]

Alkion lisääminen tiettyyn paikkaan listalla

Koska listan alkiot sijaitsevat tietyssä paikassa listalla, uusia alkioita voi sijoittaa listalla myös tiettyihin paikkoihin. insert-metodilla voidaan sijoittaa uudet alkiot halutuille paikoille listassa. Paikat listalla alkavat nollasta (0, 1, 2, 3, 4…). lista[0] tarkoittaa listan 1. paikkaa. Listan paikat häntäpäästä luettuna ovat lista[-1], lista[-2] jne.
Esimerkissä lista.insert(2, 7) sijoitetaan listassa paikalle 2 uusi luku 7, jolloin siinä paikassa oleva 8 siirtyy seuraavalle paikalle, samoin kaikki sen jälkeen tulevat alkiot siirtyvät yhden paikan verran eteenpäin.

lista = [5, 6, 8, 9]
print(lista[2])
8
lista.insert(2, 7)
print(lista[2])
7
print(lista)
[5, 6, 7, 8, 9]

Alkion lisääminen tyhjään listaan

Sekä append- että insert-metodia voi käyttää tässäkin, kun halutaan lisätä yksittäisiä alkioita listaan.

lista = []
print(lista)
[]
lista.append("Python")
lista.append("kivaa.")
print(lista)
['Python', 'kivaa.']
lista.insert(1, "on")
print(lista)
['Python', 'on', 'kivaa.']

Joskus voi tulla eteen sellainen erikoistilanne, että tyhjään listaan täytyy lisätä sama alkio monta kertaa. Tässä pääsee kaikkein helpoimmalla näin. Esimerkissä haluamme lisätä tyhjään listaan 10 kpl kakkosia. Lista ja alkiot luodaan yhtä aikaa yhdellä rivillä.

lista = [2] * 10
print(lista)
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2]

Lopuksi esimerkki siitä, miten voidaan pyytää käyttäjää lisäämään alkioita tyhjään listaan. Tätä toki voi käyttää myös silloin, kun listalla on jo alkioita. Käytetään tässä kätevää for-silmukkaa, jonka avulla käyttäjää pyydetään kolme kertaa syöttämään tyhjälle listalle jonkin alkion.
Koodi voisi näyttää esimerkiksi tältä:

lista = []
for syote in range(3):
----syote = input("Syötä mitä tahansa: ")
----lista.append(syote)
print(lista)

Tulostus voisi näyttää tältä:

Syötä mitä tahansa: 56
Syötä mitä tahansa: nappi
Syötä mitä tahansa: 3.14
['56', 'nappi', '3.14']

HUOM! Listan alkiot ovat tässä esimerkissä kaikki merkkijonoja, myös luvut, sillä inputissa ei määritelty alkioiden tyyppiä.

Alkion lisääminen uuteen listaan

Monesti on järkevää säilyttää alkuperäinen lista koskemattomana ja luoda uusi samanlainen lista, johon sitten lisätään tarvittavat uudet alkiot. Näin meillä on kaksi listaa, emmekä menetä alkuperäisen listan tietoja, jos niitä joskus tarvitaan. Tähän tilanteeseen on tarjolla eri tapoja, joista tässä kaksi.

Ensimmäisessä esimerkissä luodaan uusi tyhjä lista. Tämän jälkeen käydään for-silmukan avulla vanhan listan alkiot läpi – alkio alkiolta – ja lisätään append-metodilla samoin tein uuteen listaan. For-silmukan jälkeen lisätään uuteen listaan vielä yksi alkio viimeiseksi.

lista = [1, 2, 3, 4]
uusi = []

for alkio in lista:
----uusi.append(alkio)
uusi.append("listassa on neljä lukua")

print(uusi)
[1, 2, 3, 4, 'listassa on neljä lukua']
print(lista)
[1, 2, 3, 4]

Toisessa tapauksessa käytetään lyhyempää listan kopiointitapaa uusi = lista[:], jossa luodaan vanhasta listasta täydellinen kopio uuteen.

lista = [2, 4, 6]
uusi = lista[:]

uusi.append("listassa on kolme parillista lukua")

print(uusi)
[2, 4, 6, 'listassa on kolme parillista lukua']
print(lista)
[2, 4, 6]

Molemmissa tapauksissa alkuperäinen lista jää koskemattomaksi.

Kahden listan yhdistäminen: extend

Jos täytyy yhdistää kaksi listaa yhdeksi, tällöin apuun tulee extend-metodi. Alla olevassa esimerkissä lista2 yhdistetään lista1:een.

lista1 = [1, 2, 3, 4, 5]
lista2 = [6, 7, 8, 9, 10]
lista1.extend(lista2)
print(lista1)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


Tässä ensimmäinen Python-listoja käsittelevä artikkeli. Jos jäit jotain kaipaamaan tai jos jotain virheellistä olen tässä höpötellyt, niin pistä tulemaan viestiä. 😀
25.8.2020 Päivitin tekstiä extend-metodilla (Kahden listan yhdistäminen).


PS. Koodissa tarvittavissa sisennyksissä käytin ns. ”köyhän naisen menetelmää”, eli taustan värisiä (valkoisia) tavuviivoja, joiden avulla sain siirrettyä sisennettävän rivin suurin piirtein oikealle kohdalle. WordPress ei tarjoa tällaiseen tapaukseen helppoa tapaa, jolla yhden rivin saisi heittäen sisennettyä. Joten jos kopioit koodeja suoraan tältä sivulta, kannattaa tavuviivojen kohdalle tehdä oikeoppinen sisennys Python-ohjelmassa, muuten koodi ei toimi. 😀