Python-oppimateriaali (CHEM-A2600)
Sisäkkäiset tietorakenteet
Pythonin erilaisia tietorakenteita voi käyttää myös sisäkkäin. Jos listoja sisältävä lista kuulostaa erikoiselta, suosittelen vahvasti kokeilemaan allaolevia esimerkkejä Spyderissä ja kokeilemaan niiden muokkausta.
Sisäkkäiset listat
Listan alkio voi olla myös toinen lista:
# Määritellään lista, jossa kaksi alkiota. Kukin alkio on kolmen alkion lista. lista = [[10, 20, 30], [1, 2, 3]] print(lista[0][0]) print(lista[1][2])
tulostaa
10
3
Eli merkinnässä lista[1][2] ensimmäinen indeksi [1] viittaa ulomman listan toiseen alkioon [1, 2, 3] (indeksointi alkaa nollasta!). Toinen indeksi [2] viittaa sisemmän listan kolmanteen alkioon (indeksointi alkaa nollasta!).
Otetaan käytännöllisempi esimerkki. Kuvataan kemiallista yhdistettä listalla:
- Listan jokainen alkio on toinen lista
- Tämä lista sisältää alkuaineen symbolin ja sen määrän yhdisteessä
yhdiste_1 = [['C', 2], ['H', 6]] yhdiste_2 = [['Ca', 1], ['Cl', 2]] # Lisätään nyt kaikki yhdisteet yhteen listaan ja tulostetaan yhdisteet = [yhdiste_1, yhdiste_2] print(yhdisteet)
tulostaa
[[['C', 2], ['H', 6]], [['Ca', 1], ['Cl', 2]]]
Laajempi esimerkki
# Käydään läpi yhdisteet, tulostetaan ne ja etsitään hiilivedyt yhdisteet = [[['C', 2], ['H', 6]], [['Ca', 1], ['Cl', 2]]] for yhdiste in yhdisteet: # "yhdiste" on nyt esim. [['C', 2], ['H', 6]] # Alustetaan muuttujat ennen sisempää for-silmukkaa yhdisteen_kaava = "" on_hiili = on_vety = False # Käydään läpi kaikki yhdisteen alkuaineet for alkuaine in yhdiste: # "alkuaine" on nyt esim. ['C', 2] # Tulostetaan määrä vain, jos se on > 1 if alkuaine[1] > 1: maara = str(alkuaine[1]) else: maara = "" yhdisteen_kaava += alkuaine[0] + maara # Tarkistetaan, onko alkuaine hiili tai vety if alkuaine[0] == 'C': on_hiili = True elif alkuaine[0] == 'H': on_vety = True # Tulostetaan yhdisteen molekyylikaava if len(yhdiste) == 2 and on_hiili and on_vety: hiilivety_str = "on hiilivety" else: hiilivety_str = "" print("Yhdiste:", yhdisteen_kaava, hiilivety_str)
tulostaa
Yhdiste: C2H6 on hiilivety Yhdiste: CaCl2
Matriisit listojen avulla
Sisäkkäisillä listoilla voisi periaatteessa kuvata matriiseja:
matriisi = [[2, 4], [5, 6]] # Tulostetaan 1. rivin 2. alkio (indeksointi nollasta!) print(matriisi[0][1]) # tulostaa 4
Käytännössä matriisilaskentaan käytetään kuitenkin NumPy-kirjaston array-tyyppiä, johon tutustutaan kierroksesta 4 lähtien.
Listat sanakirjojen sisällä
Sanakirjan arvot voivat olla vaikka listoja:
yhdisteet = {"C2H6": ["C", 2, "H", 6], "NaCl": ["Na", 1, "Cl", 1] # indeksi: 0 1 2 3 } print(yhdisteet["C2H6"]) print("Yhdisteessa C2H6 on", yhdisteet["C2H6"][3], "vetyatomia")
tulostaa
['C', 2, 'H', 6]
Yhdisteessa C2H6 on 6 vetyatomia
Sisäkkäiset sanakirjat
Sanakirjoja voi laittaa sisäkkäin:
tietokanta = { "C2H6": {"moolimassa": 30.07, "tiheys": 1.36}, "NaCl": {"moolimassa": 58.44, "tiheys": 2.16} } print("Etaanin tiheys on:", tietokanta["C2H6"]["tiheys"], "g/cm^3") print("Ruokasuolan moolimassa on:", tietokanta["NaCl"]["moolimassa"], "g/mol")
tulostaa
Etaanin tiheys on: 1.36 g/cm^3
Ruokasuolan moolimassa on: 58.44 g/mol