17: Листе (низови)


Листа је низ неколико променљивих, груписаних под истим именом. Уместо писања програма са много променљивих x0, x1, x2,... можете да дефинишете једну променљиву x и приступите њеним члановима x[0], x[1], x[2], итд. Још важније, можете да ставите друге изразе и променљиве у угласте заграде, попут x[i] и x[i+1]. То нам дозвољава да радимо са прозвољно великом количином података једноставно и ефикасно, помоћу малог кода.

Један начин прављења низа је постављање неколико вредности одвојених зарезима, у угласте заграде:

 

mojaLista = ["prva vrednost u listi", 1999, 4.5]

 

Овиме добијамо низ (листу) по имену mojaLista, са три елемента. Сваком елементу низа добија се додељује број који називамо његовим индексом: почетни елемент има индекс 0, следећи елемент има индекс 1, и тако даље. Појединачне променљиве које сачињавају листу имају имена

 

«imeListe»[«indeks»]

 

Дакле, у овом примеру, mojaLista[0] је променљива чија је вредност "prva vrednost u listi", a print(mojaLista[2]) би одштампало 4.5. Можете и да промените вредности чланова низа или да одштампате цео низ:

Пример: Мењање и штампање листе

 

Као што можете да видите, brojevi[0] се понаша као променљива: има вредност и може бити промењена.

Сада покушајте да предвидите коначан резултат примера испод, а онда покрените код.

 

Честа грешка

 

Ако покушате да користите у низу у Python-у индекс низа који не постоји, јавиће се грешка:

 

Пример: Грешка - индекс не постоји

 

У примеру изнад, пошто mojaLista има 4 елемента, а први индекс је 0, максимални могући индекс је 3. Ако затражимо индекс 4, 5, или неки већи број, добићемо грешку.

 

Корисне и често коришћене операције

 

Дужина листе: len(«lista»)

 

Да бисмо утврдили број чланова неке листе, позваћемо функцију len() те листе.

Пример: Добијање дужине листе и кретање кроз њу:

 

Вежба кодирања: Средина
Напишите функцију sredina(L) која за аргумент узима листу L и враћа члан у средини листе L. (Да би средина била дефинисана, требало би претпоставити да L има непаран број чланова.) На пример, позивање sredina([8, 0, 100, 12, 1]) би требало да врати 100, јер се налази тачно у средини листе.
Унесите код за тестирање као што је print(myfunction("test argument")) испод.

 

Јесу ли листе исте као стрингови?

 

До сада сте можда приметили да операције са листама подсећају на операције са стринговима: оба користе функцију len() за дужину и оба користе X[«indeks»] за појединачне чланове. Међутим, главна разлика између њих је да појединачни чланови стринга (карактери) не могу бити промењени (бар не на начин на који се то ради са листама).

 

Пример: Грешка - покушај промене карактера у стрингу.

 

Повезивање листи

 

Можда се из лекције о стринговима сећате да је могуће користити + за спајање (повезивање) два стринга. Може се урадити исто са листама:

 

Пример: Повезивање листи са +

 

Слично, можете користити знак множења * да продужите листу понављањем.

Пример: Употреба * код листи

 

Вежба кодирања: Природни бројеви
Напишите функцију pozitivniBrojevi која има позитиван, цео број n за улаз и враћа листу [1, 2, ...] која се састоји од првих n природних бројева.
Унесите код за тестирање као што је print(myfunction("test argument")) испод.

 

Крај низа: Негативни индекси

Да бисмо добили последњи члан листе, користимо

 

«imeListe»[-1]

 

L[-k] враћа k-ти члан од краја листе;

 

Вежба кодирања: Елементи
За задат низ исписати трећи елемент. Затим исписати други елемент отпозади.
porodica = ['mama', 'tata','brat','sestra','kuce']
Можете унети улаз за програм у поље испод.

 

Вежба кодирања: Четврто слово
Исписати четврто слово речи 'Vezbe'
Можете унети улаз за програм у поље испод.

 

Вежба кодирања: Палиндром
Палиндром је реч која се исто пише и од напред и отпозади. На пример, реч
АНИТИНА
је палиндром: прво и последње слово су исти (А), друго и друго отпозади су исти (Н), итд.
Написати функцију daLiJePalindrom(S) која узима стринг S за улаз и враћа True ako је стринг палиндром, а False ако није.
Унесите код за тестирање као што је print(myfunction("test argument")) испод.


max и sum

 

Функција max, са којом смо се раније упознали, може бити примењена и на листе бројева: враћа највећи број у листи. Слично, функција sum(L) враћа суму елемената у листи L.

Пример: сума

 

Вежба кодирања: Производ
Дефинишите функцију proizvod(L) која враћа производ елемената у листи L.
Унесите код за тестирање као што је print(myfunction("test argument")) испод.

 

Сечење листе се врши на сличан начин као сечење стринга. За низ:

 

primer = [0,1,2,3,4,5,6,7,8,9]

 

команда primer[4:8] ће означавати подниз са елементима 4 5 6 7. Погледајте у следећим примерима како се функционише сечење низа

 

Пример: сечење низа

 

 

Ако је други број у угластим заградама изостављен, онда се подразумева да подниз иде до краја низа. Ако је први број у угластим заградама изостављен, онда подниз иде од почетка низа. Ако су изостављени и почетни и крајњи број у угластим заградама, нпр. primer[:] , онда се добија цео низ, дакле primer[:] = primer

 

Ако се у угластим заградама налази три броја, трећи број означава корак. Нпр за primer[1:8:2], корак је 2, па ће резултат дати елементе са индексом 1, 3, 5 и 7. Корак може бити и негативан број, онда се иде уназад.

 

Вежба кодирања: Сецкање
Датом низу (7,8,9) уметнути три тројке почев од друге позиције. Исписати добијени низ.

Затим обрисати четири узастопна елемента низа, почев од другог елемента. Исписати добијени низ

Можете унети улаз за програм у поље испод.

 

 

Петља у листи

 

Врло се често (као у претходној вежби) користи петља за пролазак кроз сваку вредност у листи. Ако je L листа, овај код

 

for x in L: «telo petlje»

 

ради следеће: прво x добија вредност првог елемента из листе L, и извршава се тело: онда у следећем кругу x представља другу вредност у L, и извршава се тело; такав поступак се наставља за све чланове L.

 

Ево примера штампања елемената у листи:

 

 

Вежба кодирања: For in
Дефинисати функцију proizvod(L) као у једном од претходних примера, али овога пута са новом петљом, која се креће директно кроз низ ( for element in niz) користећи for и in команде.
Унесите код за тестирање као што је print(myfunction("test argument")) испод.