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. 😀