Како направити торке у Питхон-у и зашто их користити?

Torke predstavljaju ugrađeni tip podataka u Pajtonu, namenjen skladištenju kolekcija informacija. Po funkcionalnosti su slične listama, ali poseduju veću brzinu.

Ipak, ograničenja koja imaju čine ih manje poželjnim u nekim situacijama u odnosu na liste. U ovom tekstu objasniću sve ključne detalje neophodne za početak korišćenja torki.

Šta je torka?

Kao što je već navedeno, torka je jedan od osnovnih tipova podataka u Pajtonu, koji služi za čuvanje skupova podataka. Podseća na listu u Pajtonu po tome što podatke organizuje u iterativnom formatu, sličnom nizu. Međutim, za razliku od liste, torka je nepromenljiva. To znači da, jednom kreirana, njene vrednosti ne mogu biti menjane.

Novi elementi se ne mogu dodavati, niti se postojeći mogu uklanjati. Zbog toga je torka idealna za skladištenje podataka koji su statični. Može čak sadržati i kolekciju podataka različitih tipova. U narednom odeljku ćemo istražiti razne načine za formiranje torki u Pajtonu.

Kako kreirati torku u Pajtonu?

Postoji nekoliko načina za stvaranje torki u Pajtonu. U ovom delu teksta ćemo obraditi tri najčešće korišćene metode, koje ćete verovatno koristiti i viđati prilikom čitanja tuđeg koda.

Da biste mogli da pokrenete primere koda koji slede, potrebno je da imate instaliran Pajton. Ako ga nemate, možete pronaći koristan vodič za instalaciju Pajtona. Alternativno, kod možete izvršavati i onlajn, koristeći platforme kao što je Google Colab.

#1. Korišćenje torke sa zagradama

Najčešći način za definisanje torke u Pajtonu je da se kolekcija vrednosti stavi unutar zagrada. Ove vrednosti se razdvajaju zarezima. Sledeći primer ilustruje ovu metodu:

# Kreiranje torke postavljanjem vrednosti unutar zagrada
values = (1, 2, 3)

# Ispis torke na ekran
print(values)

# Ispis tipa promenljive values
print(type(values))

Pokretanjem ovog koda dobićete sledeći rezultat:

Kao što se može videti u izlazu, torka sadrži vrednosti kojima je inicijalizovana. Takođe, njen tip je <class ‘tuple’>.

Prilikom kreiranja torki u Pajtonu, zagrade nisu obavezne. Stoga je izraz values = 1, 2, 3 jednako validan kao i values = (1, 2, 3). Međutim, preporučuje se korišćenje zagrada radi bolje čitljivosti koda.

Stvaranje torki sa jednim elementom u Pajtonu zahteva poseban pristup. Umesto da se samo jedan element stavi u zagrade, neophodno je dodati i zarez na kraju. Sledeći primer to ilustruje:

# Bez zareza na kraju, ovo neće kreirati torku
not_a_tuple = (1)

# Sa zarezom na kraju, ovo će kreirati torku
a_tuple = (1,)

# Ispis not_a_tuple
print(not_a_tuple)

# Ispis tipa podataka not_a_tuple
print(type(not_a_tuple))

# Ispis a_tuple
print(a_tuple)

# Ispis tipa podataka a_tuple
print(type(a_tuple))

Pokretanjem navedenog koda, videćete da not_a_tuple postaje celobrojna vrednost 1. Ovo je ključno imati na umu prilikom kreiranja torki.

#2. Korišćenje konstruktor funkcije

Drugi način za formiranje torki u Pajtonu je korišćenjem konstruktor funkcije `tuple()`. U ovoj metodi, poziva se funkcija, kojoj se kao argument prosleđuje iterabilni objekat, kao što je lista. Ovaj objekat će biti konvertovan u torku. Primer:

# Kreiranje torke iz liste vrednosti
values = tuple([1, 2, 3])

# Ispis vrednosti
print(values)

# Ispis tipa podataka promenljive values
print(type(values))

Kao što možete da primetite, korišćenjem funkcije postiže se isti rezultat kao i kod korišćenja literala. Ipak, funkcija vam omogućava da kreirate torke na osnovu dinamičkih vrednosti, kao što je lista čije su vrednosti poznate tek u trenutku izvršavanja programa. Kod prve metode, morali biste unapred znati vrednosti ili identifikatore koji će činiti vašu torku, dok pišete kod.

#3. Kreiranje prazne torke

Tokom rada sa torkama u kodu, može se javiti potreba za kreiranjem prazne torke. Prazne torke se kreiraju onako kako biste i očekivali. Možete koristiti ili konstruktor `tuple()` ili literalni pristup. Primeri:

# Korišćenje torke literala
empty_tuple_1 = ()

# Korišćenje konstruktora
empty_tuple_2 = tuple()

Prazne torke su korisne kada predstavljaju prazan skup rezultata. Razmotrite sledeću funkciju:

def create_range(start, end):
    return tuple(range(start, end))

Ova funkcija formira torku sa vrednostima od početne do krajnje vrednosti koju prosledite. Ako želite da iterirate kroz rezultate funkcije, koristili biste nešto poput sledećeg:

my_values = create_range(0, 5)

for value in my_values:
    pass

Ukoliko biste prosledili 5 i 5 funkciji `create_range`, rezultat bi bila prazna torka. U tom slučaju, petlja ne bi imala iteracije, a kod bi nastavio da se izvršava bez problema.

S druge strane, da ne postoje prazne torke, a umesto njih dobijete vrednost `None`, pokušaj iteracije bi doveo do greške. Da biste sprečili grešku, morali biste da primenite poseban uslov koji proverava da li funkcija `create_range` vraća `None` ili neku drugu vrednost koja predstavlja praznu torku.

Ovo bi dovelo do neurednog koda. Idealno, trebalo bi izbegavati posebne slučajeve koliko god je to moguće. To znači da povratna vrednost svih funkcija treba da ima isti interfejs, kako bi vaš kod radio u opštem slučaju. U ovom slučaju, to znači da funkcija uvek treba da vraća torku, iako ona ponekad može biti prazna.

Kako pristupiti elementima

Postoje dva načina za pristup elementima torke u Pajtonu. Prvi je pristupanje elementima putem indeksa, a drugi je destrukturiranje elemenata. Prvo ćemo ispitati kako pristupiti elementima pomoću indeksa.

Pristup elementima preko indeksa

Pristup elementima pomoću indeksa je sličan pristupu elementima liste. Ovo se postiže korišćenjem uglastih zagrada. Torke koriste sistem indeksiranja koji kreće od nule, što znači da je prvi element na indeksu 0, sledeći na indeksu 1, i tako dalje do poslednjeg elementa.

Primer ispod pokazuje pristup elementima preko indeksa:

# Kreiranje torke
values = (1, 2, 3, 4)

# Pristup prvom elementu
first_element = values[0]

# Pristup četvrtom elementu (indeks 3)
fourth_element = values[3]

Možete koristiti i negativno indeksiranje. Element sa indeksom -1 je poslednji element, a element sa indeksom -2 je drugi od poslednjeg elementa.

# Kreiranje torke
values = (1, 2, 3, 4)

# Pristup poslednjem elementu
last_element = values[-1]

# Pristup drugom od poslednjeg elementa
second_from_last_element = values[-2]

Dodatno, moguće je pristupiti i podskupovima elemenata iz torke primenom sečenja. Ovo je slično sečenju liste. Sintaksa je sledeća: `[: : ]`. Sledeći primer prikazuje sečenje:

# Kreiranje torke
values = (1, 2, 3, 4, 5, 6, 7)

# Dohvatanje prva tri elementa
values[0: 3]

# Dohvatanje svakog drugog elementa
values[::2]

Iteracija kroz elemente

Torka je objekat koji se može iterirati u Pajtonu. Zbog toga možete iterirati kroz njene elemente koristeći for petlju, kao što je prikazano u sledećem primeru:

values = (1, 2, 3, 4)

for value in values:
    print(value)

Ovaj metod pristupa elementima je idealan kada želite da pristupite svim elementima torke.

Pristup elementima destrukturiranjem

Da biste bolje razumeli destrukturiranje, razmotrite sledeći scenario u kojem pokušavamo da dođemo do različitih elemenata u torki.

# Kreiranje torke za beleženje informacija o korisniku
person_record = (1, 'John Doe', '[email protected]')

# Pristup različitim elementima torke za upotrebu u kodu
id = person_record[0]
name = person_record[1]
email = person_record[2]

Pajton nam omogućava praktičniji metod za pristup vrednostima, kao što je ilustrovano u nastavku:

# Kreiranje torke za beleženje informacija o korisniku
person_record = (1, 'John Doe', '[email protected]')

id, name, email = person_record

Ovo se naziva destrukturiranje. Promenljivoj `id` će biti dodeljena prva vrednost iz torke, promenljivoj `name` druga, i tako redom. Gornji primer je ekvivalentan ovome:

id, name, email = (1, 'John Doe', '[email protected]')

U ovom slučaju, umesto da stavljamo torku u promenljivu, mi je odmah destrukturiramo. Kada se ovo kombinuje sa činjenicom da nije neophodno koristiti zagrade prilikom kreiranja torki, kod se može pisati i na sledeći način.

id, name, email = 1, 'John Doe', '[email protected]'

Na kraju, imaćete promenljive `id`, `name` i `email` sa vrednostima 1, ‘John Doe’ i ‘[email protected]‘. Ovo je praktičan i sažet način kreiranja promenljivih u Pajtonu, koji se često sreće u produkcijskom kodu. Razumevanje da se iza ove sintakse nalazi koncept torki je ključno.

Razlike između torke i liste

Iako su slične, postoje ključne razlike koje čine svaki od ovih tipova pogodnijim za određene slučajeve upotrebe. Razumevanje tih razlika će vam pomoći da odlučite koji tip podataka je najbolje koristiti i da pišete bolji i efikasniji kod.

Aspekt Torka Lista
Memorija Skladišti se u kontinualnoj memoriji Skladišti se u različitim delovima memorije
Promenljivost Nepromenljiva (ne može se menjati) Promenljiva (može se menjati)
Brzina Pristup je brži Pristup je sporiji
Tip podataka Obično skladišti podatke različitih tipova Obično skladišti podatke istog tipa
Upotreba Često se koristi za grupu različitih vrednosti kao oznake. Obično se koristi za čuvanje kolekcije sličnih vrednosti.

Prednosti torke

#1. Brža je

Zahvaljujući načinu na koji su vrednosti torke smeštene u kontinualnoj memoriji, pristup vrednostima je brži u poređenju sa listom. Međutim, pošto se jednom kreiraju, torke se ne mogu menjati, pa stoga nisu uvek najbolja struktura za skladištenje kolekcija vrednosti.

Njihova idealna primena je skladištenje velikog broja statičnih podataka u memoriji kojima će se više puta pristupati tokom izvršavanja programa. U ovom slučaju, vaš program će imati koristi od povećanja performansi torki.

#2. Vraćanje više vrednosti

Možete koristiti torke za vraćanje više vrednosti iz funkcije i destrukturirati rezultat. Primer:

from random import randint

def create_two_numbers():
    first_num = randint(0, 9)
    second_num = randint(0, 9)

    return first_num, second_num

first_num, second_num = create_two_numbers()

U ovom primeru, imamo funkciju koja kreira dva nasumična broja i vraća ih kao torku. Naredba `return first_num, second_num` je ekvivalentna naredbi `return (first_num, second_num)`. To je zato što su zagrade opcione prilikom kreiranja torki. Da bismo pristupili rezultatu, mi ga destrukturiramo.

#3. Vrednosti su zaštićene od pisanja

Torke su nepromenljive jednom kada se kreiraju. Stoga su idealne za čuvanje podataka u memoriji koji se ne menjaju tokom izvršavanja programa. One osiguravaju da slučajno nećete prepisati podatke na nekom drugom mestu u kodu.

#4. Skladištenje više tipova podataka

Torke vam omogućavaju da skladištite vrednosti različitih tipova podataka. Ovo vam omogućava da kreirate zapise podataka, kao što je čuvanje podataka o korisniku u torki. Takođe možete da skladištite složenije stavke kao što su funkcije, rečnici, druge torke, pa čak i liste.

Uobičajene metode torki

#1. `count()`

Objekat torke sadrži metod `count()`, koji broji koliko puta se element pojavljuje. Primer:

# Kreiranje torke sa nekoliko brojeva
values = (1, 2, 3, 4, 5, 4, 4, 6)

# Brojanje broja četvorki
n_fours = values.count(4)

# Ispis broja četvorki
print(n_fours)

Iz ovog primera se može videti da se broj 4 pojavljuje tačno tri puta u našoj torki.

#2. `index()`

Metod `index()` se može koristiti za pronalaženje indeksa prvog pojavljivanja vrednosti u torki. Ako vrednost ne postoji, izbaciće se izuzetak `ValueError`. Primer:

# Kreiranje torke sa nekoliko brojeva
values = (1, 2, 3, 4, 5, 4, 4, 6)

# Traženje indeksa broja 4
index_of_four = values.index(4)
print("Indeks broja 4:", index_of_four)

# Traženje indeksa broja 9
index_of_nine = values.index(9)
print("Indeks broja 9:", index_of_nine)

A kada se pokrene gornji kod, ovo je izlaz:

U ovom slučaju, indeks broja 4 je 3 i kod je radio bez problema. Ali kada je došlo do pronalaženja indeksa broja 9, program je bacio izuzetak. Važno je obraditi takve izuzetke prilikom pisanja Pajton programa koji koriste `index()` metod.

#3. `len()`

Kao i svi iterabilni objekti u Pajtonu, torke imaju svojstvo dužine, kojem možete pristupiti prosleđivanjem torke kao argumenta funkciji `len()`. Primer:

# Kreiranje torke
values = (1, 2, 3, 4)

# Dohvatanje dužine
length = len(values)

# Ispis rezultata
print(length)

Ovo je rezultat pokretanja navedenog koda.

#4. `min()` i `max()`

Metodi `min()` i `max()` funkcionišu tako što prolaze kroz svaki element iterabilnog objekta i upoređuju da li je veći ili manji od prethodnog. Na kraju, `max()` će vratiti najveći element, dok će `min()` vratiti najmanji.

Sa brojevima, operacija je očigledna. Sa stringovima, Pajton će koristiti abecedni redosled. Najmanja reč, koju vraća `min()`, je prva reč ako su stringovi napisani abecednim redom, dok je najveća reč poslednja reč. Ako iterabilni objekat sadrži mešavinu različitih tipova podataka, obe operacije će biti neuspešne jer Pajton ne zna kako da uporedi različite tipove podataka.

Primer:

# Kreiranje torke sa vrednostima
values = (1, 2, 3, 4, 5)

# Dohvatanje najveće vrednosti
largest = max(values)

# Dohvatanje najmanje vrednosti
smallest = min(values)

# Ispis rezultata
print(largest)
print(smallest)

#5. `sorted()`

Funkcija `sorted()` u Pajtonu uzima iterabilni objekat i vraća listu sortiranih elemenata. Možete pozvati `sorted()` funkciju, proslediti torku kao argument, i dobiti elemente torke sortirane u listi. Da biste sortiranu listu pretvorili u torku, možete koristiti konstruktor. Primer:

# Kreiranje torke sa vrednostima u nasumičnom redosledu
values = (1, 5, 3, 3, 2, 4)

# Korišćenje sorted za sortiranje vrednosti u listu
sorted_list = sorted(values)

# Konvertovanje liste u torku
sorted_tuple = tuple(sorted_list)

# Ispis rezultata
print(sorted_tuple)

#6. Sabiranje i množenje torki

Operacija sabiranja dve torke ih jednostavno spaja. Operacija množenja ponavlja elemente torke onoliko puta koliko iznosi vrednost kojom ste množili. Primer:

# Kreiranje torke sa nekoliko vrednosti
values = (1, 2, 3, 4, 5)

# Kreiranje nove torke sabiranjem
added = values + values

# Kreiranje nove torke množenjem
multiplied = values * 2

print("values + values =", added)
print("values * 2 =", multiplied)

Zaključak

U ovom tekstu ste naučili da:

  • Torke su objekti slični listama koji služe za čuvanje kolekcija vrednosti.
  • Za razliku od listi, one su nepromenljive.
  • Brže su i efikasnije od lista.
  • Mogu se formirati korišćenjem zagrada i razdvajanjem vrednosti zarezima.
  • Takođe se mogu formirati korišćenjem konstruktor funkcije `tuple()`.
  • Možete pristupiti pojedinačnim vrednostima koristeći indeksni sistem koji počinje od nule.
  • Možete destrukturirati vrednosti iz torke.
  • Takođe možete iterirati kroz vrednosti koristeći `for` petlju.
  • Možete koristiti različite metode sa torkama.

Zatim, možda ćete želeti da pogledate više Pajton sadržaja, kao što su metode liste u Pajtonu i metode rečnika u Pajtonu.