Järjend (list)

Python-i tähtsaimate andmestruktuuride hulka kuulub kindlasti ka järjend, ehk list, kus elemendid moodustavad kindla järjestuse.

list_of_subjects = ['physics', 'chemistry', 'math', 'english']

Listi loomine käib nagu tavalise muutuja loomine, kuid listi elemendid asuvad kandilistes sulgudes [] ning on eraldatud komadega. Samuti ei pea järjendi elemendid olema sama tüüpi, ehk sobib ka järgnev konstruktsioon:

list_of_prices = ['free', 4.50, 3, 'cheap']

Samas võivad eri tüüpi elemendid omavahelisi vigu tekitada, seepärast ei ole mõningates teistes programmeerimiskeeltes listis eri tüüpi elemendid lubatud.

Samuti on oluline teada, et igale elemendile järjendis vastab kindel number. Esimese elemendi positsiooniks, ehk indeksiks, on 0, teise elemendi omaks on 1, kolmanda 2 jne. Tänu kindlale järjestusele ja numbrilisele vastavusele on elemente lihtne kätte saada.

Elementidele ligi pääsemine

list_of_subjects = ['physics', 'chemistry', 'math', 'english']
list2 = [22, 32, 44, 82, 78, 15, 71]

print("list1[0]: ", list_of_subjects[0])
print("list2[1:5]: ", list2[1:5])

Selle koodi käivitamise tulemus:

list1[0]:  physics
list2[1:5]:  [32, 44, 82, 78]

Attention

Pöörake tähelepanu, et list2 elementidele ligipääsemisel [1:5] tähendab, et me saame elemente alates indeksist 1 (kaasa arvatud) kuni indeksini 5 (välja arvatud).

Samuti on hea teada, kus asub viimane element. Selle saame kätte nii, et küsime järjendist tagantpoolt esimese elemendi.

print("Last element is: ", list_of_subjects[-1]) # --> Last element is: english

Järjendi uuendamine

Kui me tahame järjendi mingisse positsiooni uut elementi (asendada vana element uuega), siis käib see tavalise omistamisega.

list_of_subjects = ['physics', 'chemistry', 'math', 'english']

print("Value at index 2: " + list_of_subjects[2])
list_of_subjects[2] = 'art'
print("New value at index 2: " + list_of_subjects[2])

print(list_of_subjects)

Ülaltoodud kood annab tulemuseks:

Value available at index 2: math
New value available at index 2: art
['physics', 'chemistry', 'art', 'english']

Samamoodi saab järjendisse lisada uusi elemente ilma omistamiseta, suurendades selle pikkust. Selleks kasutame sisseehitatud meetodi append(), mis lisab uue elemendi järjendi lõppu:

some_list = ['lists', 'are']

print(len(some_list))  # --> 2

some_list.append('cool')

print(some_list)  # --> ['lists', 'are', 'cool']
print(len(some_list))  # --> 3

Oluline on teada, et append() lisab alati väärtuse järjendi lõppu. Kui me tahame lisada uue elemendi järjendi algusesse või keskele, peame kasutama meetodit insert():

some_list.insert(0, 'Some')  # insert() takes two arguments: index and element to add

print(some_list)  # ['Some', 'lists', 'are', 'cool']

Järjendi elementide kustutamine

Järjendist saab elemente kustutada kolmel erineval viisil.

  1. Elemendi kustutamiseks asukoha, ehk indeksi järgi, on olemas meetod del. Indeksi määramata jätmisel eemaldatakse järjendi esimene element.

list_of_subjects = ['physics', 'chemistry', 'math', 'english']

del list_of_subjects[1]
print(list_of_subjects)

Ülaltoodud kood annab tulemuseks:

['physics', 'math', 'english']
  1. Elemendi kustutamiseks selle väärtuse järgi on olemas meetod remove. See eemaldab järjendist esimese, ehk madalaima indeksiga elemendi, millel on vastav väärtus.

list_of_subjects = ['physics', 'chemistry', 'math', 'english', 'math']

list_of_subjects.remove('math')
print(list_of_subjects)

Ülaltoodud kood annab tulemuseks:

['physics', 'chemistry', 'english', 'math']
  1. Kolmandaks on olemas meetod pop, mis eemaldab järjendist elemendi indeksi järgi, sarnaselt del meetodile, kuid kahe olulise erinevusega. Esiteks eemaldab pop indeksi määramata jätmisel järjendi viimase, mitte esimese liikme. Teiseks tagastab pop eemaldatud liikme, ehk võimaldab eemaldatud liikmega kohe midagi ette võtta.

list_of_subjects = ['physics', 'chemistry', 'math', 'english']

print(list_of_subjects.pop(1))
print(list_of_subjects)

Ülaltoodud kood annab tulemuseks:

chemistry
['physics', 'math', 'english']

Operatsioonid järjenditega

Operatsioonid järjenditega sarnanevad operatsioonidele sõnedega (loe rohkem siit: Sõne (string)), kuid tulemuseks on järjend, mitte uus sõne.

Järgnevas tabelis toome välja mõned olulisemad operatsioonid järjenditega.

Sisend

Väljund

Info

len([1, 2, 3])

3

järjendi elementide arvu leidmine

sum([1, 2, 3])

6

järjendi elementide summa

min([1, 2, 3])

1

leiab minimaalse elemendi

max([1, 2, 3])

3

leiab maksimaalse elemendi

sorted([7, 2, 3])

[2, 3, 7]

tagastab sorteeritud järjendi

[3, 2, 3].count(3)

2

tagastab elemendi esinemiste arvu

['he'] + ['llo']

['he', 'llo']

järjendite ühendamine

['Hi'] * 3

['Hi', 'Hi', 'Hi]

lubab järjendit korrata

3 in [1, 2, 3]

True

järjendisse kuulumise kontrollimine

Mõned näited alltoodud koodi näitel:

los = ['physics', 'chemistry', 'math', 'english']

Sisend

Väljund

Info

los[0]

physics

tagastab järjendi esimese elemendi

los[2]

math

tagastab järjendi kolmanda elemendi

los[1:]

['chemistry', 'math', 'english']

tagastab järjendi elemendid teisest kuni viimaseni

los[1:3]

['chemistry', 'math']

tagastab järjendi elemendid teisest kuni kolmandani

los[-1]

english

tagastab järjendi viimase elemendi

Elementide ühekaupa läbi käimine

Kui soovitakse teha midagi iga järjendi elemendiga, siis kasutatakse tsüklit (loe rohkem siit: Tsükkel (loop)). Võtmesõna end kasutame selleks, et kõik trükitud väärtused oleks samal real.

grades_this_semester = [1, 2, 2, 3, 4]

for grade in grades_this_semester:
    print(grade + 1, end=' ') # Prints 2 3 3 4 5

Samas kui me näiteks ei taha tegeleda kõikide elementidega, vaid osaga, siis saab kasutada range().

colors = ["red", "green", "blue", "purple"]
for i in range(len(colors) - 2):
   print(colors[i], end = ' ')  # Prints red green

Järjendi slice-imine kolme argumendiga

Kui meil on teada kindel järjendi struktuur ning soovime saada elemente mingi kindla sammuga on võimalik kasutada slice-imist kolme argumendiga. Järjendist on võimalik saada üksikuid elemente [] operaatoriga, mille tähistus on [start:stop:step].

Esimese elemendi indeks on järjendis indeksil 0 ja viimane indeksil len(list) - 1 või -1.

  • [start] indeks, kust alustada tükeldamist (kaasarvatud). Selle ärajätmisel eeldab Python, et tükeldamine algab algusest.

  • [stop] elemendi indeks, kus peatuda (seda elementi ei arvata vahemikku), indeksi ärajätmisel tükeldatakse lõpuni.

  • [step] sammu suurus itereerimisel, vaikimisi on see 1; -1 itereerib järjendi tagurpidi

# no pec # You can also edit the code colors = ["red", "green", "blue", "purple", "violet", "yellow", "pink", "orange"] print(colors[1:6:3]) # [step] can be omitted print(colors[1:4]) # [start] and [stop] can be omitted print(colors[::2]) # By choosing [step] to be -1, we get the reverse of original print(colors[::-1])

Annab tulemuseks:

['green', 'violet']
['green', 'blue', 'purple']
['red', 'blue', 'violet', 'pink']
['orange', 'pink', 'yellow', 'violet', 'purple', 'blue', 'green', 'red']

Slice-imine töötab sarnaselt range töötamisele, kus saab järjendile anda kolmanda arvu, mis määratakse sammuks, mis määrab ära kui mitu elementi jäetakse vahele. Näide kasutades range:

example_list = [i for i in range(100)]
print(example_list)

div_by_ten_list = []
for i in range(0, len(example_list), 10):
    div_by_ten_list.append(i)

print(div_by_ten_list)

Annab tulemuseks:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]

Sama asja on võimalik teha järjendi slice-imisega, kui kasutada sama meetodit, mis järjendile ligipääsemisel kasutasime:

example_list = [i for i in range(100)]
print(example_list)
print(example_list[0:len(example_list):10])

Annab tulemuseks:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]

Lisamaterjalid