Naučite strukturu podataka Python liste - 1. dio


Struktura podataka je zbirka tipova podataka, odnosa među njima i funkcija ili operacija koje se mogu primijeniti na podatke. Tip podataka može biti string, Integer, Floating value i tako dalje.

Koja je razlika između promjenjivog/nepromjenjivog objekta?
Promjenjivi objekti
  1. Objekti čije se stanje može promijeniti nakon kreiranja, kao što je dodavanje, ažuriranje ili brisanje elemenata.
  2. Liste, Dictionary, Set, bytearray su promjenjivi tipovi objekata u pythonu.
Nepromjenjivi objekti
  1. Stanje objekta se ne može mijenjati. Jednom kada je objekat kreiran, ne možemo dodavati, uklanjati ili ažurirati elemente.
  2. String, Integer, Tuples, Frozenset su neki od nepromjenjivih tipova objekata u Pythonu.
Koja je razlika između homogene/heterogene strukture podataka?
  1. Homogena struktura podataka – Elementi podataka će biti istog tipa podataka (npr. niz).
  2. Heterogena struktura podataka – Elementi podataka ne moraju biti istog tipa podataka (npr. lista, tuple, skupovi itd...).
Šta su primitivni i neprimitivni tipovi podataka?

Prije nego što shvatimo funkcionalnost ugrađene strukture podataka, pogledajmo nekoliko ugrađenih funkcija koje će se koristiti s objektima strukture podataka.

  • dir(obj) – ugrađena funkcija koja će vratiti atribut i metode.
  • len(obj) – vraća dužinu (broj stavki) objekta. Argument može biti sekvenca (kao što je string, bajtovi, tuple, lista ili opseg) ili kolekcija (kao što je rečnik, skup ili zamrznuti skup).
  • del – Ova ugrađena ključna riječ se koristi za brisanje objekta iz imenskog prostora ili uklanjanje stavki iz objekta poput liste, rječnika, itd.
  • type(obj) – Funkcija type() ili vraća tip objekta ili vraća objekt novog tipa na osnovu proslijeđenih argumenata.
  • id() – Ova funkcija vraća “identitet” objekta. Ovo je cijeli broj za koji je zajamčeno da je jedinstven i konstantan za ovaj objekt tokom njegovog životnog vijeka.

Sada, kao što ste vidjeli nekoliko važnih detalja, nastavimo sa Python strukturama podataka.

Python dolazi sa ugrađenim strukturama podataka kao i korisnici mogu definirati vlastite strukture podataka. Ugrađena struktura podataka uključuje LIST, RJEČNIK, TUPLE i SET. Neki od primjera za korisnički definirane strukture podataka su STACK, QUEUES, TREE, HASHMAP, itd…

Ljudi koji dolaze iz drugih programskih jezika bit će vrlo upoznati sa tipom niza. Ali u Python-u, oni nisu tako česti.

Ovdje je lista na neki način slična nizu, ali lista nam omogućava pohranjivanje vrijednosti bilo kojeg tipa podataka (Heterogene), dok će niz sadržavati podatke samo određenog tipa (int, float itd…). Da biste koristili niz, morate eksplicitno uvesti niz iz modula “array”.

U ovoj seriji članaka o Python-u, pogledat ćemo šta je to struktura podataka i ugrađena struktura podataka u pythonu.

LIST

Lista je struktura podataka koja je skup različitih tipova podataka. Šta znači “prikupljanje različitih tipova podataka”? Lista može pohraniti nizove, cijele brojeve, vrijednosti s pomičnim zarezom, ugniježđenu listu i tako dalje.

Objekti Lista su “Promjenjivi” što znači da se stavkama kreiranim unutar liste može pristupiti, mijenjati ili brisati. Lista podržava indeksiranje. Svaka stavka na listama je dodijeljena adresi i ta adresa se može koristiti za pristup ili izmjenu vrijednosti određene stavke.

  • Napravite listu
  • Ubaci/Pristupi/Izmijeni listu
  • Obriši listu

CREATE LIST

Lista se može kreirati pomoću uglastih zagrada.

>>> name_empty = []			# Empty list
>>> name = ['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']	# list with string data type
>>> name_int = [1,2,3]			# list with Integer data type
>>> name_mixed = [name_int,name,1,2,3.14]	# list with nested list items.
>>> name_mixed
[[1, 2, 3], ['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will'], 1, 2, 3.14]
>>> name_int
[1, 2, 3]

Možemo koristiti ugrađenu funkciju type() za provjeru tipa objekta.

>>> type(name)

Možemo pristupiti metodama i atributima instance list pomoću funkcije dir().

>>> dir(name)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

Ukupan broj stavki na listi možemo saznati pomoću metode len().

>>> len(name)

Možemo kreirati novu listu iz postojeće liste koristeći metodu list.copy().

>>> name_new = name.copy()
>>> name_new
['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']

UMETANJE/PRISTUP/IZMJENA LISTE

Možemo umetnuti stavku u listu na bilo koju poziciju koristeći metodu list.insert(i, x).

>>> name = ['Leo','Matt','Kane','Scott','Petter','Will']
>>> name
['Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name.insert(0,'Tom')	# Insert method takes 2 arguments (Index position, Item)
>>> name
['Tom', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']	# Tom is inserted at the 0th position.

Možemo koristiti metodu list.append(x) da dodamo jednu stavku na listu. Ovo će umetnuti stavku na kraj liste.

>>> name = []
>>> len(name)
0
>>> name.append('Leo')
>>> name.append('Matt')
>>> name.append('Kane')
>>> print(name)
['Leo', 'Matt', 'Kane']

Možemo koristiti metodu list.extend() za dodavanje više stavki na listu.

>>> new_name = ['Gowtham','Martin','Luis']
>>> name.extend(new_name)
>>> name
['Will', 'Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin', 'Luis']

Također možemo koristiti '+' operator za kombiniranje dvije liste. Obje liste mogu biti različitih tipova podataka.

>>> a = [1,2,3]
>>> b = [2,3,3]
>>> c = a + b
>>> c
[1, 2, 3, 2, 3, 3]
>>> d = ['karthi','kenny']
>>> e = a + d
>>> e
[1, 2, 3, 'karthi', 'kenny']

Kao što je već rečeno, objekti liste su promjenjivi. Stavka liste može se modificirati upućivanjem na poziciju indeksa i dodjeljivanjem vrijednosti.

>>> name									# Before modified
['Tom', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name[0] = 'Karthi'
>>> name									# After Modified
['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']

Lista podržava i pozitivno i negativno indeksiranje.

Indeksiranje počinje od 0, a negativno indeksiranje počinje od -1.

Možemo pristupiti stavci liste koristeći njihov indeksni položaj.

>>> name[0]			# Accessing the List item at index 0
'Leo'
>>> name[1]
'Matt'
>>> name[4]
'Petter'
>>> name[5]
'Will'
>>> name[-1]			# Accessing the list item with negative indexing
'Will'
>>> name[-6]
'Leo'

Također možemo koristiti sečenje za pristup stavkama na listi. Rezanje nam omogućava pristup nizu stavki definiranjem početnih, završnih parametara koraka.

SYNTAX: list[starting position, ending position, Step]

>>> name[0:3]
['Tom', 'Leo', 'Matt']
>>> name[:]
['Tom', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name[:4]
['Tom', 'Leo', 'Matt', 'Kane']
>>> name[:-2]
['Tom', 'Leo', 'Matt', 'Kane', 'Scott']
>>> name[:-1]
['Tom', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter']
>>> name[:-1:2]
['Tom', 'Matt', 'Scott']

Možemo pronaći broj pojavljivanja za datu vrijednost pomoću metode list.count(x).

>>> name_int = [1,1,2,3,1]
>>> name_int.count(1)
3

Poziciju indeksa date stavke možemo pronaći pomoću metode list.index(x[, start[, end]]).

>>> name			# Inserted ‘Will’ at the end of the list. Now we have 2 name ‘Will’.
['Will', 'Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will']
>>> name.index('Will)	# Returns the index position of first occurence of x.
0
>>> name.index('Will',2)	# Starting index positon’2’ is given.
7
>>> name.index('Will',2,4)	# Starting and Ending Index position is given. Since there is no 					occurence of ‘Will’ within the given search position it will throw 					Value Error.
Traceback (most recent call last):
File "<stdin>", line 1, in 
ValueError: 'Will' is not in list

Možemo koristiti metodu list.reverse() da obrnemo stavke na listi.

>>> name
['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name.reverse()
>>> name
['Will', 'Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi']

IZBRIŠI LISTU

Možemo koristiti metodu list.pop(x) da uklonimo stavku sa liste na poziciji x. Ova funkcija će ukloniti stavku sa liste i prikazati uklonjenu stavku. Ako x nije specificiran onda će metoda pop() vratiti posljednju stavku sa liste.

>>> name
['Will', 'Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin', 'Luis']
>>> name.pop(0)
'Will'
>>> name
['Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin', 'Luis']
>>> name.pop()
'Luis'

Također možemo koristiti metodu list.remove (x) da uklonimo stavku sa liste. Ovdje x uzima vrijednost stavke i izbacuje ValueError ako x nije na listi.

>>> name = ['Leo','Matt','Kane','Scott','Petter','Will']
>>> name.remove('Leo')
>>> name
['Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name.remove('Leo')
Traceback (most recent call last):
  File "", line 1, in 
ValueError: list.remove(x): x not in list

Listu možemo učiniti praznom ili dodjeljivanjem naziva liste uglastim zagradama ili korištenjem metode list.clear().

>>> name1 = name.copy()
>>> name1
['Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin']
>>> name
['Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin']
>>> name = []			
>>> name
[]
>>> name1.clear()		
>>> name1
[]

Umjesto korištenja metoda liste kako bismo listu učinili praznim ili uklonili stavku sa liste, možemo koristiti ugrađenu ključnu riječ del da izvršimo ove radnje. Ključna riječ “del” može izbrisati objekt liste iz memorije ili obrisati stavku sa liste ili izbrisati stavku iz dijela.

>>> name = ['Leo','Matt','Kane','Scott','Petter','Will']
>>> del name[0]
>>> name
['Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> del name[-3:]
>>> name
['Matt', 'Kane']
>>> del name[:]
>>> name
[]

Ugrađena funkcija id() vraća “identitet ” objekta. Ovo je cijeli broj za koji je zajamčeno da je jedinstven i konstantan za ovaj objekt tokom njegovog životnog vijeka.

>>> id(name)
139979929658824
>>> del name
>>> id(name)
Traceback (most recent call last):
  File "", line 1, in 
NameError: name 'name' is not defined

Napomena: uklonili smo varijablu liste iz memorije koristeći del(), pa se javlja greška u imenu.

help() funtion:

Ugrađena pomoć function() je vrlo korisna za dobivanje detalja o određenom objektu ili metodama tog objekta.

help(object)
help(object.method)
Sažetak

Do sada smo u ovom članku vidjeli kako možemo koristiti strukturu podataka liste za pohranjivanje, pristup, modificiranje, brisanje objekata liste korištenjem metoda liste. Također smo vidjeli neke ugrađene funkcije kao što su id(), dir(), type(), help()< koje su vrlo efikasne funkcije. Imamo i razumijevanje liste u Python-u koje pruža sažetiji i čitljiviji način kreiranja liste.