Колекције података

У претходној лекцији смо употребили торку вредности да бисмо помоћу for петље обавили неке наредбе (рачунање и исписивање) над сваком вредношћу из торке.

Торке су такође тип података у Пајтону, као што су то бројеви, стрингови или логичке вредности. Типови int (цео број), float (реалан број), str (стринг) и bool (логичка вредност) су основни типови. Разлика између торки и основних типова је у томе што се вредност торке састоји од више вредности једноставнијег типа.

Сваку вредност која се састоји од више вредности једноставнијег типа зваћемо колекција. Податке од којих се колекција састоји зовемо елементи колекције.

Једине колекције које смо до сада упозали су торке, које ћемо сада упознати детаљније. У наставку лекције ћемо видети још неке врсте колекција.

Торка и њени елементи

Паковање и распакивање торки

Целу торку можемо да сместимо у променљиву, као што то радимо и са вредностима простијег типа. У следећем примеру, променљива temperature садржи целу торку као своју вредност.

Овакво додељивање вредности (као у првој линији програма) зовемо и паковање торке. Могућа је и обрнута додела: када знамо колико торка има елемената, можемо да елементе торке доделимо одговарајућем броју променљивих:

Кажемо да се у наредби ime, prezime, nadimak = puno_ime врши распакивање торке.

Исти ефекат има и сродна наредба

ime, prezime, nadimak = "Милан", "Јовановић", "Батут"

У овој наредби се торке и не појављаују, па овде говоримо о вишеструком додељивњу вредности.

Елементи и индекси торке

Елементе торке можемо да добијемо и тако што напишемо име торке, а иза њега у угластим заградама редни број елемента који желимо. Овде треба запамтити да бројање елемената било које колекције почиње од нуле. На пример:

Редни број елемента се још назива и индекс елемента. За торку од n елемената као индексе можемо да користимо бројеве 0, 1, 2, … n-1. У примеру горе је n = 3, па су дозвољени индекси 0, 1 и 2. Покушај да употребимо неки индекс ван ових граница проузрокује грешку (можете да испробате ово).

Дужина торке

Број елемената торке можемо да добијемо помоћу функције len.

или краће:

Обратите пажњу на двоструке заграде (једне због функције, а друге због торке).

Кроз ове примере смо видели да елементи торке могу да буду бројеви или стрингови. У ствари, елементи торке могу бити било којег типа, основног или сложенијег.

Дозвољено је на пример правити торку торки:

Торка t садржи две једноставније торке, зато је број њених елемената 2.

У Пајтону је дозвољено да елементи торке буду различитог типа и касније ћемо видети и такве примере.

Опсег

Опсег (енгл. range) је још једна врста колекције. За разлику од торке, елементи ове колекције су увек цели бројеви.

Опсег може да се зада на више начина.

Опсег са једним аргументом

Најједноставнији облик задавања опсега је range(n), где је n неки цео позитиван број. Опсег range(n) садржи целобројне вредности од 0 до n, не укључујући n. На пример, range(5) садржи вредности 0, 1, 2, 3, 4.

Видимо да у for наредби можемо да користимо опсег на исти начин као и торку. У ствари, на месту торке или опсега може да стоји било која колекција.

Пошто опсег range(n) садржи укупно n вредности, овако задат опсег се често користи када неку наредбу треба само поновити n пута на исти начин:

Наредба print је извршена за сваку вредност i из секвенце 0, 1, 2, 3, 4, али у овом примеру се те вредности не користе у телу петље. Тако смо постигли да се наредба print изврши 5 пута на потпуно исти начин, то јест да се понови 5 пута.

Друга честа употреба оваквог опсега је да помоћу њега прођемо кроз све елементе торке. Овакав начин пролажења кроз вредности торке је погодан када нам осим тих вредности у петљи требају и њихови редни бројеви (овакав начин пролажења кроз колекцију је чешћи у другим програмским језицима него у Пајтону).

Опсег са два аргумента

Када нам је потребна секвенца узастопних целих бројева која не почиње нулом, опсег задајемо као range(a, b), где су a и b цели бројеви, такви да је \(a<b\). Тада секвенцу чине цели бројеви од a до b, не укључујући b. На пример, опсег range(1, 6) даје секвенцу бројева 1, 2, 3, 4, 5:

Опсег са три аргумента

Трећи облик задавања опсега има три аргумента:

Вредности опсега задатог са range(a, b, c) иду од a до b (не укључујући b) са кораком c, тј. мењајући се за по c. Корак c може да буде и негативан:

Опсег можемо да конвертујемо у торку (обрнуто није могуће, нити је потребно):

Стринг као колекција

Стрингове смо до сада користили као основни тип, али стрингови могу да се користе и као колекције појединачних карактера. Можемо да пролазимо кроз карактере стринга помоћу петље и да дохватамо поједине каратере користећи индексе:

Функције над колекцијама

У Пајтону постоје многе функције које као аргумент прихватају колекцију. Једна од њих је функција len, коју смо већ упознали. Још неке често коришћене функције које се примењују над колекцијама су:

  • min, која даје најмањи елемент колекције

  • max, која даје највећи елемент колекције

  • sum, која даје збир елемената колекције

Вредности функција len, min, max, sum за опсег можемо да одредимо и из параметара опсега. Такође, функције min и max се обично не примењују на стрингове (оне враћају редом карактер са најмањим и највећим кодом). Овде само истичемо да све поменуте функције прихватају разне врсте колекција као свој аргумент (укључујући и опсег и стринг).

Питања

    Q-28: Шта исписује следећи програм?

    t = (32, 41, 20, 17)
    a, b, c, d = t
    print(c)
    
  • долази до грешке у програму
  • Покушајте поново
  • 2
  • Покушајте поново
  • 20
  • Тачно
  • 3
  • Покушајте поново

    Q-29: Шта исписује следећи програм?

    a = (1, 2, 3)
    print(a[1])
    
  • 1
  • Покушајте поново
  • 2
  • Тачно
  • долази до грешке у програму
  • Покушајте поново
  • 3
  • Покушајте поново

    Q-30: Који опсег садржи само вредности 1, 2, 3 ?

  • range(4)
  • Покушајте поново
  • range(1, 4)
  • Тачно
  • range(3)
  • Покушајте поново
  • range(1, 3)
  • Покушајте поново

    Q-31: Колико вредности садржи опсег range(1, 10, 2) ?

  • 5
  • Тачно
  • 6
  • Покушајте поново
  • 9
  • Покушајте поново
  • 10
  • Покушајте поново
    Q-32: Упарите опсеге са бројем елемената. Покушајте поново!
  • 5
  • range(5)
  • 0
  • range(3, 3)
  • 3
  • range(1, 4)
  • 1
  • range(3, 6, 3)
    Q-33: Упарите опсеге са вредностима. Покушајте поново!
  • 3, 4, 5
  • range(3, 6)
  • 0, 1, 2
  • range(3)
  • 3, 1
  • range(3, -1, -2)
  • 3, 2, 1, 0, -1
  • range(3, -2, -1)
  • 3
  • range(3, 6, 3)