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 selline 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 keeltes 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 ligipää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]

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 väga oluline teada, kus asub viimane element. Selle saame kätte nii, et küsime tagantpoolt esimese elemendi.

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

Järjendi uuendamine

Kui me tahame järjendi mingisse positsiooni uut elementi, siis käib see tavalise omistamisega.

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

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

print(list_of_subjects)

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

Pöörake tähelepanu, et append() lisab alati väärtuse järjendi lõppu. Kui me tahame lisada uue elemendi listi 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

Käib läbi võtmesõna del, kui teatakse täpselt, millisel indeksil elementi soovitakse kustutada.

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

print(list_of_subjects)
del list_of_subjects[1]
print(list_of_subjects)

Annab tulemuseks

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

On võimalik ka kasutada sisseehitatud meetodi remove(), mis võtab argumendina järjendi elementi, mida soovitatakse kustutada.

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

list_of_subjects.remove('english')
print(list_of_subjects)  # -->  ['physics', 'math']

Operatsioonid järjenditega

Operatsioonid järjenditega sarnanevad operatsioonidega sõnedega, kuid tulemuseks on järjend, mitte uus sõne.

Sisend Väljund
len([1, 2, 3]) 3
[‘he’] + [‘llo’] [‘hello’]
[‘Hi’] * 3 [‘Hi’, ‘Hi’, ‘Hi]
3 in [1, 2, 3] True
los = ['physics', 'chemistry', 'math', 'english']
Sisend Väljund
los[2] math
los[1:] [‘chemistry’, ‘math’, ‘english’]
los[-1] english

Elementide ühekaupa läbi käimine

Kui soovitakse teha midagi iga järjendi elemendiga, siis kasutatakse tsüklit. 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. Slice-imine töötab sarnaselt range-e töötamisele, kus saab järjendile anda kolmanda arvu, mis määratakse sammuks, mis määrab ära kui mitu elementi jäetakse vahele.

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)
[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. Sellega kehtivad samad reeglid, esimene arv on kaasaarvatud ning annab esimese elemendi koha, teine arv on lõppkoht, mis pole kaasaarvatud ning kolmas arv on slice-e samm.

example_list = [i for i in range(100)]
print(example_list)
print(example_list[0:len(example_list):10])
[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 järjendite kohta

Materjalides kirjutatu on ainult osa sellest, mida saab järjenditega teha ja kuidas neid kasutada. Palju rohkem leiab infot ametlikust pydoc-ist

https://docs.python.org/3.6/tutorial/datastructures.html