Weboldal keresés

Ismerje meg a Python-lista adatszerkezetét – 1. rész


Az Adatstruktúra adattípusok gyűjteménye, a köztük lévő kapcsolatok és az adatokon alkalmazható funkciók vagy műveletek. Az adattípus lehet karakterlánc, Egész szám, Lebegő érték és így tovább.

Mi a különbség a változtatható/megváltoztathatatlan objektum között?
Változó objektumok
  1. Olyan objektumok, amelyek állapota a létrehozás után módosítható, például elemek hozzáadása, frissítése vagy törlése.
  2. A Listák, a szótár, a készlet, a bytearray a python változó objektumtípusai.
Megváltozhatatlan tárgyak
  1. Az objektum állapota nem módosítható. Az objektum létrehozása után nem tudunk elemeket hozzáadni, eltávolítani vagy frissíteni.
  2. String, Integer, Tuples, Frozenset néhány megváltoztathatatlan objektumtípus a pythonban.
Mi a különbség a homogén/heterogén adatstruktúra között?
  1. Hogén adatstruktúra – Az adatelemek azonos típusúak lesznek (pl.: tömb).
  2. Heterogén adatstruktúra – Előfordulhat, hogy az adatelemek nem azonos típusúak (pl. lista, sorok, halmazok stb.).
Mik azok a primitív és nem primitív adattípusok?

Mielőtt megértené a beépített adatstruktúra funkcionalitását, lássunk néhány beépített függvényt, amelyeket az adatstruktúra objektumokkal fogunk használni.

  • dir(obj) – egy beépített függvény, amely visszaadja az attribútumot és a metódusokat.
  • len(obj) – Egy objektum hosszát (elemek számát) adja vissza. Az argumentum lehet sorozat (például karakterlánc, bájtok, sor, lista vagy tartomány) vagy gyűjtemény (például szótár, halmaz vagy rögzített halmaz).
  • del – Ez a beépített kulcsszó objektumok névtérből való törlésére vagy elemek eltávolítására szolgál egy objektumból, például listából, szótárból stb.
  • type(obj) – A type() függvény vagy az objektum típusát adja vissza, vagy egy új típusú objektumot ad vissza az átadott argumentumok alapján.
  • id() – Ez a függvény egy objektum „identitását” adja vissza. Ez egy egész szám, amely garantáltan egyedi és állandó ennek az objektumnak az élettartama során.

Most, hogy néhány fontos részletet látott, folytassuk a python adatstruktúrákkal.

A Python beépített adatstruktúrákkal rendelkezik, valamint a felhasználók meghatározhatják saját adatszerkezeteiket. A beépített adatstruktúra a következőket tartalmazza: LIST, DITIONARY, TUPLE és SET. Néhány példa a felhasználó által definiált adatstruktúrákra: STACK, QUEUES, TREE, HASHMAP stb.

A más programozási nyelvekből érkezők nagyon jól ismerik a tömbtípust. De a pythonban nem olyan gyakoriak.

Itt a lista hasonlít egy tömbhöz, de a lista lehetővé teszi számunkra, hogy bármilyen adattípus értékét tároljuk (heterogén), míg a tömb csak bizonyos típusú adatokat tárol (int, float stb.). A tömb használatához kifejezetten importálnia kell a tömböt a „tömb” modulból.

Ebben a Python-cikksorozatban megvizsgáljuk, mi az adatstruktúra és a python beépített adatstruktúra.

LISTA

A Lista egy adatstruktúra, amely különböző adattípusok gyűjteménye. Mit jelent a „különféle adattípusok gyűjtése”? A Lista karakterláncokat, egész számokat, lebegőpontos értékeket, beágyazott listát és így tovább tárolhat.

A Lista objektumok „Mutable”, ami azt jelenti, hogy a listán belül létrehozott elemek elérhetők, módosíthatók vagy törölhetők. Lista támogatja az indexelést. A listák minden eleme egy címhez van rendelve, és ez a cím használható az adott elemérték eléréséhez vagy módosításához.

  • Hozzon létre egy listát
  • Lista beszúrása/Hozzáférés/Módosítás
  • Lista törlése

LISTA LÉTREHOZÁS

A lista szögletes zárójelek használatával hozható létre.

>>> 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]

Használhatjuk a beépített type() függvényt az objektum típusának ellenőrzésére.

>>> type(name)

A list példány metódusait és attribútumait a dir() függvény segítségével érhetjük el.

>>> 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']

A lista elemeinek teljes számát a len() módszerrel tudjuk megtudni.

>>> len(name)

Létrehozhatunk egy új listát a list.copy() metódussal.

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

LISTA BEHELYEZÉS/ELÉRÉS/MÓDOSÍTÁS

A list.insert(i, x) metódussal tetszőleges pozícióban beszúrhatunk egy elemet a listába.

>>> 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.

Használhatjuk a list.append(x) metódust egyetlen elem hozzáadásához a listához. Ezzel beszúrja az elemet a lista végére.

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

A list.extend() metódus segítségével több elemet is hozzáadhatunk a listához.

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

A '+' operátort is használhatjuk két lista kombinálásához. Mindkét lista különböző típusú lehet.

>>> 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']

Mint már említettük, az objektumok változtathatók. A listaelemek módosíthatók az indexpozícióra való hivatkozással és értéket adva hozzá.

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

A lista támogatja a pozitív és negatív indexelést is.

Az indexelés 0-tól, a negatív indexelés pedig -1-től kezdődik.

A listaelemet az indexpozíciójuk alapján érhetjük el.

>>> 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'

A szeletelést is használhatjuk a lista elemeinek eléréséhez. A szeletelés lehetővé teszi, hogy egy sor elemhez hozzáférjünk a kezdő, befejező, lépés paraméterek megadásával.

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']

Egy adott érték előfordulásának számát a list.count(x) módszerrel találhatjuk meg.

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

Egy adott elem indexpozícióját a list.index(x[, start[, end]]) módszerrel találhatjuk meg.

>>> 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

Használhatjuk a list.reverse() metódust a lista elemeinek megfordításához.

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

LISTA TÖRLÉSE

A list.pop(x) metódussal eltávolíthatunk egy elemet a listából az x pozícióban. Ez a funkció eltávolítja az elemet a listáról, és megjeleníti az eltávolított elemet. Ha az x nincs megadva, akkor a pop() metódus a lista utolsó elemét adja vissza.

>>> 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'

Használhatjuk a list.remove (x) metódust is az elem eltávolításához a listáról. Itt az x veszi az elem értékét, és ValueError-t dob, ha az x nincs a listában.

>>> 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

A listát üressé tehetjük, ha a lista nevét szögletes zárójelbe adjuk, vagy a list.clear() metódussal.

>>> 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
[]

Ahelyett, hogy listás módszereket használnánk a lista üressé tételére vagy egy elem eltávolítására a listáról, használhatjuk a beépített del kulcsszót a műveletek végrehajtására. A „del” kulcsszó törölhet egy listaobjektumot a memóriából, vagy törölhet egy elemet a listából, vagy törölhet egy elemet egy szeletből.

>>> 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
[]

A beépített id() függvény egy objektum „identitását” adja vissza. Ez egy egész szám, amely garantáltan egyedi és állandó ennek az objektumnak az élettartama során.

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

Megjegyzés: eltávolítottuk a listaváltozót a memóriából a del() segítségével, ezért névhibát ad.

help() funtion:

A beépített súgó function() nagyon hasznos egy adott objektumról vagy az objektum metódusairól szóló részletek megszerzéséhez.

help(object)
help(object.method)
Összegzés

Ebben a cikkben eddig azt láthattuk, hogyan használhatjuk a lista adatszerkezetet listaobjektumok tárolására, elérésére, módosítására és törlésére a lista metódusok használatával. Láttunk néhány beépített függvényt is, mint például az id(), dir(), type(), help()< amelyek nagyon hatékony függvények. A pythonban elérhető a listaértés is, amely tömörebb és olvashatóbb módot biztosít a lista létrehozására.