Листе¶
Од колекција смо до сада поменули торку и опсег, а видели смо да и стринг може да се користи као колекција. Још једна веома важна и често коришћена врста колекција је листа.
Листе и торке¶
Листе, као и торке, могу да се задају набрајањем елемената, уз разлику да се елементи листе пишу између угластих заграда:
Листе су по много чему сличне торкама. Све што смо од особина торки поменули у поглављу о колекцијама, важи и за листе:
Листа се такође може сместити у променљиву и обрнуто - елементи листе се могу доделити одговарајућем броју променљивих (другим речима, листа се може спаковати и распаковати)
елементима листе се може приступити помоћу имена листе и редног броја (индекса) елемента написаног у угластим заградама
дужина листе се добија функцијом len
Листе имају и неке особине које их разликују од торки. На пример, листе се могу продужавати помоћу функције append:
Такође, елементи листе могу да мењају своје вредности и могу да се избацују из листе:
Овакве операције са торкама нису могуће. Једном направљена торка остаје таква док постоји. Торка као вредност не може да се модификује - не може мењати своју дужину нити вредности појединих елемената. Променљива која садржи торку може само да добије целу нову торку као вредност, али тиме претходна торка није модификована, него је престала да постоји. Зато за торке кажемо да су непроменљиве (имутабилне).
Торке можемо да користимо за колекције података које не намеравамо да мењамо током извршавања програма (мада их можемо мењати ручно пре извршавања програма). Употребом торки обезбеђујемо да се подаци неће променити случајно, а и програм ће радити нешто ефикасније са торком него што би радио са листом.
У току рада програма торка t се може конвертовати у листу a и обрнуто: a = list(t)
односно t = tuple(a)
, али овакве конверзије су веома ретко потребне и боље их је избегавати (ако се често примењују на великим колекцијама, овакве конверзије могу значајно да успоре програм).
Формирање листе¶
Као што смо већ видели, листе можемо једноставно и ефикасно да постепено градимо у програму. На пример, ако је дата торка бројева из које желимо да у листу пребацимо оне који су већи од нуле (да бисмо са њима наставили да рачунамо), то можемо да урадимо овако:
На почетку имамо празну листу, а онда у петљи користимо функцију append да бисмо додали у листу елементе које желимо.
Учитавање листе¶
На потпуно исти начин можемо да формирамо листу од података који се учитавају:
Други начин да учитамо листу је да прво формирамо листу потребне дужине, а онда да у петљи учитане вредности додељујемо директно елементима листе.
Користили смо наредбу a = [0] * n
којом се формира листа од n елемената. Операција [0] * n
се назива умножавање (мултиплицирање) листе. Резултат умножавања листе је n надовезаних датих листи. На пример [0] * 5 је листа [0, 0, 0, 0, 0], а [2, 7] * 3 је листа [2, 7, 2, 7, 2, 7].
Ако корисник уноси све елементе листе у једном реду раздвојене размацима, програм пишемо овако:
За растављање унетог текста на краће стрингове који садрже појединачне бројеве употребили смо функцију split().
Funkcija split():
Параметар функције split() је знак или текст који желимо да користимо као раздвајач (сепаратор). Ако не наведемо сепаратор, подразумева се размак.
"1234 56".split() -> ["1234", "56"]
"1234,56".split(',') -> ["1234", "56"]
Резултат функције split() је листа стрингова. Број краћих стрингова које ћемо као резултат добити, зависи од броја и распореда знакова - раздвајача у полазном стрингу. На пример, ако текст садржи само један знак за раздвајање негде у средини, добићемо два краћа стринга. Сваки нови знак за раздвајање може произвести стринг више у резултату (ако заиста одваја неки део полазног стринга од остатка текста).
"1;23;456;7".split(';') -> ["1", "23", "456", "7"]
" 1 234 56 7 ".split() -> ["1", "234", "56", "7"]
Примери и задаци¶
Пример - продаје
На почетку скрипте су дате вредности неколико продаја у једној продавници. Издвојити у листу продаје које су по вредности веће од 1000, а мање или једнаке 4000, а затим их исписати.
Задатак решавамо овако:
Пример - Нагле промене
Дата је торка бројева. Издвојити у листу бројеве који се од својих претходника разликују бар за 10, а затим их исписати.
Једно могуће решење је:
Задатак - парни бројеви
Дата је торка бројева. Издвојити у листу бројеве који су парни, а затим их исписати.
Подсетимо се, број x је паран ако је \(x \% 2 == 0\)
Задатак - свака трећа реч
Дата је торка стрингова. Издвојити у листу стрингове чији индекси су дељиви са 3, а затим их исписати.
Задатак - испод нуле
Дата је торка бројева. Издвојити у листу бројеве који су негативни, а њихови претходници позитивни, а затим исписати издвојене бројеве.