Python - Tuple


Kreiranja Tuple-a

Tuple se stvara stavljanjem svih stavki (elemenata) u zagrade (), odvojenih zarezima. Zagrade nisu obvezne, međutim dobra je praksa da se koriste. Tuple može imati bilo koji broj predmeta i mogu biti različitih vrsta (integer, float, list, string itd.).

# Različite vrste tuples

# Prazan tuple
my_tuple = ()
print(my_tuple)

# Tuple koji imaju cijele brojeve (integers)
my_tuple = (1, 2, 3)
print(my_tuple)

# tuple sa mješovitim tipovima podataka (datatypes)
my_tuple = (1, "Hello", 3.4)
print(my_tuple)

# ugnježdeni tuple
my_tuple = ("mouse", [8, 4, 6], (1, 2, 3))
print(my_tuple)

Tuple se takođe može stvoriti bez upotrebe zagrada. Ovo je poznato kao pakovanje tuple-a.

my_tuple = 3, 4.6, "pas"
print(my_tuple)

# tuple raspakivanje je takođe moguće
a, b, c = my_tuple

print(a)      # 3
print(b)      # 4.6
print(c)      # pas

Stvaranje tuple s jednim elementom pomalo je nezgodno. Imati jedan element u zagradama nije dovoljno. Trebaće nam zarez koji označava da je to zapravo tuple.

my_tuple = ("hello")
print(type(my_tuple))  # <class 'str'>

# Stvaranje tuple koji ima jedan element
my_tuple = ("hello",)
print(type(my_tuple))  # <class 'tuple'>

# Zagrade nisu obavezne
my_tuple = "hello",
print(type(my_tuple))  # <class 'tuple'>


Pristupite tuple elementima

Postoje različiti načini na koje možemo pristupiti elementima tuple-a.


1. Indeksiranje (Indexing)

Možemo koristiti operator indeksa uglaste zagrade [] za pristup stavci u tuple, gdje indeks počinje od 0. Dakle, tuple koja ima 6 elemenata imaće index-se od 0 do 5. Pokušaj pristupanja index-su izvan raspona index-sa tuple (6,7, ... u ovom primjeru) podići će IndexError.

Index-s mora biti cijeli broj (integer), tako da ne možemo koristiti float ili druge tipove. To će rezultovati TypeError. Jednako tako, ugniježdenim tuple-ima pristupa se pomoću ugniježdenog indeksiranja, kao što je prikazano u sljedećem primjeru.

# Pristup elementima tuple pomoću indeksiranja
my_tuple = ('p','e','r','m','i','t')

print(my_tuple[0])   # 'p' 
print(my_tuple[5])   # 't'

# IndexError: list index out of range
# print(my_tuple[6])

# Index mora biti integer
# TypeError: list indices must be integers, not float
# my_tuple[2.0]

# ugnježdeni tuple
n_tuple = ("mouse", [8, 4, 6], (1, 2, 3))

# ugnježdeni index
print(n_tuple[0][3])       # 's'
print(n_tuple[1][1])       # 4

2. Negativno indeksiranje (Negative Indexing)

Python omogućava negativno indeksiranje svojih sekvenci. Indeks -1 odnosi se na posljednju stavku, -2 na drugu posljednju stavku i tako dalje.

# Negativno indeksiranje za pristup elementima tuple-a
my_tuple = ('p', 'e', 'r', 'm', 'i', 't')

# Ispisuje: 't'
print(my_tuple[-1])

# Ispisuje: 'p'
print(my_tuple[-6])

3. Rezanje (Slicing)

Možemo pristupiti nizu predmeta u tuple pomoću operatora dvotačke (:).

# Pristup elementima korice pomoću rezanja (slicing)
my_tuple = ('i','t','t','u','t','o','r','i','j','a','l','i')

# elementi od 2-og do 4-og
# Ispisuje: ('t', 't', 'u')
print(my_tuple[1:4])

# elementi koji počinju do 2.
# Ispisuje: ('i', 't')
print(my_tuple[:-7])

# elementi od 8. do kraja
# Ispisuje: ('o', 'r', 'i', 'j', 'a', 'l', 'i')
print(my_tuple[7:])

# elementi počinju do kraja
# Ispisuje: ('i', 't', 't', 'u', 't', 'o', 'r', 'i', 'j', 'a', 'l', 'i')
print(my_tuple[:])


Mijenjanje Tuple

Za razliku od lista, tuple su nepromjenjive. To znači da se elementi tuple ne mogu mijenjati nakon što im se dodijele vrijednosti. Ali, ako je element sam po sebi promjenjiv tip podataka poput liste, njegove ugniježdene stavke mogu se mijenjati. Takođe možemo dodijeliti tuple različitim vrijednostima (preraspodjela).

# Promjena vrijednosti tuple
my_tuple = (4, 2, 3, [6, 5])

# TypeError: 'tuple' object does not support item assignment
# my_tuple[1] = 9

# Međutim, stavka promjenjivog elementa se može promijeniti
my_tuple[3][0] = 9    # Output: (4, 2, 3, [9, 5])
print(my_tuple)

# Tuplese može prerasporediti
my_tuple = ('i', 't', 't', 'u', 't', 'o', 'r', 'i', 'j', 'a', 'l', 'i')

# Ispisuje: ('i', 't', 't', 'u', 't', 'o', 'r', 'i', 'j', 'a', 'l', 'i')
print(my_tuple)

Možemo koristiti operator + da kombinujemo dva tuple-a. To se naziva spajanje. Takođe možemo ponoviti elemente u tuple određeni broj puta koristeći operator *. Operacije + i * rezultuju novim tuple-om.

# Spajanje
# Ispisuje: (1, 2, 3, 4, 5, 6)
print((1, 2, 3) + (4, 5, 6))

# Ponovi
# Ispisuje: ('Repeat', 'Repeat', 'Repeat')
print(("Repeat",) * 3)


Brisanje tuple

Kao što je gore rečeno, ne možemo mijenjati elemente u tuple. To znači da ne možemo brisati ili uklanjati stavke iz tuple. Međutim, potpuno uklanjanje tuple moguće je pomoću ključne riječi del.

# Brisanje tuples
my_tuple = ('i', 't', 't', 'u', 't', 'o', 'r', 'i', 'j', 'a', 'l', 'i')

# ne može se brisati stavka
# TypeError: 'tuple' object doesn't support item deletion
# del my_tuple[3]

# Može izbrisati cijeli tuple
del my_tuple

# NameError: name 'my_tuple' is not defined
print(my_tuple)