Uzziniet Python saraksta datu struktūru - 1. daļa


Datu struktūra ir datu tipu kopums, saistība starp tiem un funkcijas vai darbības, kuras var izmantot datiem. Datu tips var būt virkne, vesels skaitlis, peldoša vērtība un tā tālāk.

  1. Objekti, kuru stāvokli pēc izveides var mainīt, piemēram, elementu pievienošana, atjaunināšana vai dzēšana.
  2. Saraksti, vārdnīca, kopa, baitrejs ir maināmi objektu veidi pitonā.

  1. Objekta stāvokli nevar mainīt. Kad objekts ir izveidots, mēs nevaram pievienot, noņemt vai atjaunināt elementus.
  2. Virkne, vesels skaitlis, skaitļi, Frozensets ir daži no nemaināmiem pitona objektu veidiem.

  1. Homogēna datu struktūra - datu elementiem būs tāda paša veida dati (piemēram, masīvs).
  2. neviendabīga datu struktūra - datu elementiem var nebūt viena veida dati (piemēram, saraksts, kopas, kopas utt.).

Pirms saprotam iebūvētās datu struktūras funkcionalitāti, apskatīsim dažas iebūvētās funkcijas, kuras tiks izmantotas ar datu struktūras objektiem.

  • dir (obj) - iebūvēta funkcija, kas atgriezīs atribūtu un metodes.
  • len (obj) - atgriež objekta garumu (priekšmetu skaitu). Arguments var būt secība (piemēram, virkne, baiti, kopa, saraksts vai diapazons) vai kolekcija (piemēram, vārdnīca, kopa vai fiksēta kopa).
  • del - Šis iebūvētais atslēgvārds tiek izmantots, lai izdzēstu objektu no nosaukumvietas vai noņemtu objektus no objekta, piemēram, saraksta, vārdnīcas utt.
  • type (obj) - funkcija type() vai nu atgriež objekta tipu, vai atgriež jauna tipa objektu, pamatojoties uz nodotajiem argumentiem.
  • id() - šī funkcija atgriež objekta “identitāti”. Tas ir vesels skaitlis, kas tiek garantēts, ka tas ir unikāls un nemainīgs šim objektam tā dzīves laikā.

Tagad, kad esat redzējis dažas svarīgas detaļas, turpināsim darbu ar pitona datu struktūrām.

Python nāk ar iebūvētām datu struktūrām, kā arī lietotāji var definēt paši savas datu struktūras. Iebūvētā datu struktūra ietver LIST, DICTIONARY, TUPLE un SET. Daži no lietotāja definētu datu struktūru piemēriem ir STACK, QUEUES, TREE, HASHMAP utt.

Cilvēki, kas nāk no citām programmēšanas valodām, būs ļoti pazīstami ar masīva tipu. Bet pitonā tie nav tik izplatīti.

Šeit saraksts ir līdzīgs masīvam, taču saraksts ļauj mums uzglabāt jebkura veida datu vērtības (neviendabīgas), savukārt masīvā tiks glabāti tikai noteikta veida dati (int, float utt.). Lai izmantotu masīvu, masīvs ir jāimportē no “masīva” moduļa.

Šajā Python rakstu sērijā mēs aplūkosim, kas ir datu struktūra un Python iebūvētā datu struktūra.

Saraksts ir datu struktūra, kas ir dažādu datu veidu kolekcija. Ko nozīmē “dažādu veidu datu vākšana”? Sarakstā var saglabāt virknes, veselos skaitļus, peldošā komata vērtības, ligzdoto sarakstu un tā tālāk.

Saraksta objekti ir “maināmi”, kas nozīmē, ka sarakstā izveidotajiem vienumiem var piekļūt, tos mainīt vai izdzēst. Sarakstu atbalsta indeksēšana. Katrs saraksta vienums tiek piešķirts adresei, un šo adresi var izmantot, lai piekļūtu konkrētajai vienuma vērtībai vai mainītu to.

  • izveidojiet sarakstu
  • ievietot/piekļūt/modificēt sarakstu
  • dzēst sarakstu

Sarakstu var izveidot, izmantojot kvadrātiekavas.

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

Lai pārbaudītu objekta tipu, mēs varam izmantot iebūvēto funkciju type() .

>>> type(name)

Izmantojot dir() funkciju, mēs varam piekļūt saraksta instances metodēm un atribūtiem.

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

Izmantojot len() metodi, mēs varam uzzināt kopējo vienumu skaitu sarakstā.

>>> len(name)

Mēs varam izveidot jaunu sarakstu no esoša saraksta, izmantojot metodi list.copy() .

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

Mēs varam ievietot vienumu sarakstā jebkurā pozīcijā, izmantojot metodi 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.

Mēs varam izmantot metodi list.append (x) , lai sarakstā pievienotu vienu vienumu. Tādējādi vienums tiks ievietots saraksta beigās.

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

Mēs varam izmantot metodi list.extend() , lai sarakstam pievienotu vairākus vienumus.

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

Divu sarakstu apvienošanai mēs varam izmantot arī operatoru + . Abiem sarakstiem var būt dažādi datu veidi.

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

Kā jau norādīts, objekti ir maināmi. Saraksta vienumu var modificēt, atsaucoties uz indeksa pozīciju un piešķirot tam vērtību.

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

Saraksts atbalsta gan pozitīvu, gan negatīvu indeksēšanu.

Indeksēšana sākas ar 0 un negatīvā indeksēšana sākas ar -1.

Mēs varam piekļūt saraksta vienumam, izmantojot viņu indeksa pozīciju.

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

Mēs arī varam izmantot sagriešanu, lai piekļūtu vienumiem sarakstā. Sagriešana ļauj mums piekļūt vienumu klāstam, definējot sākuma, beigu un soļa parametrus.

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

Izmantojot list.count (x) metodi, mēs varam atrast noteiktas vērtības sastopamības skaitu.

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

Izmantojot list.index (x [, start [, end]]) metodi, mēs varam atrast attiecīgā vienuma rādītāja pozīciju.

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

Lai mainītu saraksta vienumus, mēs varam izmantot metodi list.reverse() .

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

Lai noņemtu vienumu no saraksta x pozīcijā, mēs varam izmantot metodi list.pop (x) . Šī funkcija noņems vienumu no saraksta un parādīs noņemto vienumu. Ja x nav norādīts, metode pop() atgriezīs pēdējo vienumu no saraksta.

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

Lai noņemtu vienumu no saraksta, mēs varam izmantot arī metodi list.remove (x) . Šeit x ņem vienuma vērtību un izmet ValueError, ja x nav sarakstā.

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

Sarakstu varam padarīt tukšu, vai nu piešķirot saraksta nosaukumu kvadrātiekavās, vai izmantojot metodi 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
[]

Tā vietā, lai izmantotu saraksta metodes, lai padarītu sarakstu tukšu vai noņemtu vienumu no saraksta, šo darbību veikšanai varam izmantot iebūvēto atslēgvārdu del . Atslēgvārds “del” var izdzēst saraksta objektu no atmiņas, izdzēst vienumu no saraksta vai izdzēst elementu no šķēles.

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

Iebūvētā funkcija id() atgriež objekta “identitāti”. Tas ir vesels skaitlis, kas tiek garantēts, ka šim objektam tā laikā ir unikāls un nemainīgs.

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

Piezīme. Mēs esam noņēmuši saraksta mainīgo no atmiņas, izmantojot del() , tāpēc tas rada nosaukuma kļūdu.

help() funtion:

Iebūvētā palīdzība function() ir ļoti noderīga, lai iegūtu informāciju par konkrētu objektu vai šī objekta metodēm.

help(object)
help(object.method)

Līdz šim šajā rakstā mēs esam redzējuši, kā mēs varam izmantot saraksta datu struktūru, lai saglabātu, piekļūtu, modificētu un dzēstu objektu objektus, izmantojot saraksta metodes. Mēs esam redzējuši arī dažas iebūvētas funkcijas, piemēram, id(), dir(), type(), help(), kas ir ļoti efektīvas funkcijas. Mums ir arī izpratne par sarakstu pitonā, kas nodrošina kodolīgāku un saprotamāku saraksta izveidošanas veidu.