Sužinokite Python sąrašo duomenų struktūrą – 1 dalis


Duomenų struktūra – tai duomenų tipų rinkinys, ryšys tarp jų ir funkcijos arba operacijos, kurias galima pritaikyti duomenims. Duomenų tipas gali būti eilutė, Sveikasis skaičius, Slankioji vertė ir pan.

Kuo skiriasi kintamas/nekintamas objektas?
Kintamieji objektai
  1. Objektai, kurių būseną galima pakeisti sukūrus, pvz., pridėti, atnaujinti ar ištrinti elementus.
  2. Sąrašai, žodynas, rinkinys, bytearray yra kintantys python objektų tipai.
Nekintami objektai
  1. Objekto būsenos keisti negalima. Sukūrus objektą negalime pridėti, pašalinti ar atnaujinti elementų.
  2. String, Integer, Tuples, Frozenset yra kai kurie nekintami python objektų tipai.
Kuo skiriasi vienalytė/heterogeninė duomenų struktūra?
  1. Homogeninė duomenų struktūra – duomenų elementai bus to paties tipo (pvz., masyvas).
  2. Heterogeninė duomenų struktūra – duomenų elementai gali būti kitokio tipo (pvz., sąrašas, eilutės, rinkiniai ir kt.).
Kas yra primityvūs ir neprimityvūs duomenų tipai?

Prieš suprasdami integruotos duomenų struktūros funkcionalumą, pažiūrėkime į keletą integruotų funkcijų, kurios bus naudojamos su duomenų struktūros objektais.

  • dir(obj) – įtaisyta funkcija, kuri grąžins atributą ir metodus.
  • len(obj) – grąžina objekto ilgį (elementų skaičių). Argumentas gali būti seka (pvz., eilutė, baitai, eilutė, sąrašas arba diapazonas) arba rinkinys (pvz., žodynas, rinkinys arba fiksuotas rinkinys).
  • del – šis integruotas raktinis žodis naudojamas norint ištrinti objektą iš vardų erdvės arba pašalinti elementus iš objekto, pvz., sąrašo, žodyno ir kt.
  • tipas(obj) – funkcija type() grąžina objekto tipą arba naujo tipo objektą pagal pateiktus argumentus.
  • id() – ši funkcija grąžina objekto „tapatybę“. Tai yra sveikasis skaičius, kuris garantuotai bus unikalus ir pastovus šiam objektui per visą jo gyvavimo laikotarpį.

Dabar, kai matėte keletą svarbių detalių, pereikime prie python duomenų struktūrų.

Python yra su integruotomis duomenų struktūromis, taip pat naudotojai gali nustatyti savo duomenų struktūras. Integruotą duomenų struktūrą sudaro SĄRAŠAS, ŽODYNAS, TUPLE ir SET. Kai kurie naudotojo apibrėžtų duomenų struktūrų pavyzdžiai yra STACK, QUEUES, TREE, HASHMAP ir kt.

Žmonės, ateinantys iš kitų programavimo kalbų, bus gerai susipažinę su masyvo tipu. Tačiau pitone jie nėra tokie dažni.

Čia sąrašas yra panašus į masyvą, tačiau sąrašas leidžia saugoti bet kokio tipo duomenų reikšmes (heterogeniškas), o masyve bus tik konkretaus tipo duomenys (int, float ir kt.). Norėdami naudoti masyvą, turite aiškiai importuoti masyvą iš „masyvo“ modulio.

Šioje Python straipsnių serijoje apžvelgsime, kas yra duomenų struktūra ir įtaisyta python duomenų struktūra.

SĄRAŠAS

Sąrašas yra duomenų struktūra, kurią sudaro įvairių tipų duomenų rinkinys. Ką reiškia „skirtingų tipų duomenų rinkimas“? Sąrašas gali saugoti eilutes, sveikuosius skaičius, slankiojo kablelio reikšmes, įdėtą sąrašą ir pan.

Sąrašo objektai yra „Pakeičiami“, o tai reiškia, kad sąraše sukurtus elementus galima pasiekti, keisti arba ištrinti. Sąrašo palaikymo indeksavimas. Kiekvienam sąrašo elementui priskiriamas adresas ir tas adresas gali būti naudojamas norint pasiekti arba pakeisti konkrečią elemento vertę.

  • Sukurkite sąrašą
  • Įterpti/pasiekti/keisti sąrašą
  • Ištrinti sąrašą

KURTI SĄRAŠĄ

Sąrašas gali būti sudarytas naudojant laužtinius skliaustus.

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

Objekto tipui patikrinti galime naudoti įmontuotą funkciją type().

>>> type(name)

Naudodami funkciją dir() galime pasiekti sąrašo egzemplioriaus metodus ir atributus.

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

Bendrą elementų skaičių sąraše galime sužinoti naudodami len() metodą.

>>> len(name)

Mes galime sukurti naują sąrašą iš esamo sąrašo naudodami list.copy() metodą.

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

SĄRAŠAS Įterpimas/PRIEIGOS/KEITIMAS

Naudodami metodą list.insert(i, x) galime įterpti elementą į sąrašą bet kurioje pozicijoje.

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

Galime naudoti metodą list.append(x), kad į sąrašą įtrauktume vieną elementą. Tai įterps elementą į sąrašo pabaigą.

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

Norėdami į sąrašą įtraukti kelis elementus, galime naudoti metodą list.extend().

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

Taip pat galime naudoti operatorių '+', kad sujungtume du sąrašus. Abu sąrašai gali būti skirtingų duomenų tipų.

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

Kaip jau minėta sąrašuose, objektai yra keičiami. Sąrašo elementą galima modifikuoti nurodant indekso poziciją ir priskiriant jam vertę.

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

Sąrašas palaiko ir teigiamą, ir neigiamą indeksavimą.

Indeksavimas prasideda nuo 0, o neigiamas indeksavimas prasideda nuo -1.

Sąrašo elementą galime pasiekti naudodami jų indekso poziciją.

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

Taip pat galime naudoti pjaustymą, kad pasiektume sąrašo elementus. Pjaustymas leidžia pasiekti daugybę elementų apibrėžiant pradžios, pabaigos, žingsnio 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']

Nurodytos reikšmės įvykių skaičių galime rasti naudodami list.count(x) metodą.

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

Nurodyto elemento indekso poziciją galime rasti naudodami list.index(x[, start[, end]]) metodą.

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

Norėdami pakeisti sąrašo elementus, galime naudoti metodą list.reverse().

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

IŠTRINTI SĄRAŠĄ

Galime naudoti list.pop(x) metodą, kad pašalintume elementą iš sąrašo, esančio x pozicijoje. Ši funkcija pašalins elementą iš sąrašo ir parodys pašalintą elementą. Jei x nenurodytas, metodas pop() grąžins paskutinį elementą iš sąrašo.

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

Taip pat galime naudoti metodą list.remove (x), kad pašalintume elementą iš sąrašo. Čia x paima elemento vertę ir pateikia ValueError, jei x sąraše nėra.

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

Sąrašą galime padaryti tuščią, priskirdami sąrašo pavadinimą laužtiniuose skliaustuose arba naudodami list.clear() metodą.

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

Užuot naudoję sąrašo metodus, norėdami padaryti sąrašą tuščią arba pašalinti elementą iš sąrašo, galime naudoti integruotą raktinį žodį del, kad atliktume šiuos veiksmus. Raktinis žodis „del“ gali ištrinti sąrašo objektą iš atminties arba ištrinti elementą iš sąrašo arba elementą iš dalies.

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

Įdiegta funkcija id() grąžina objekto „tapatybę“. Tai yra sveikasis skaičius, kuris garantuotai bus unikalus ir pastovus šiam objektui per visą jo gyvavimo laiką.

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

Pastaba: pašalinome sąrašo kintamąjį iš atminties naudodami del(), todėl rodoma pavadinimo klaida.

help() funtion:

Integruota žinyno funkcija() yra labai naudinga norint gauti išsamios informacijos apie konkretų objektą arba to objekto metodus.

help(object)
help(object.method)
Santrauka

Iki šiol šiame straipsnyje matėme, kaip galime naudoti sąrašo duomenų struktūrą sąrašo objektams saugoti, pasiekti, keisti, ištrinti naudodami sąrašo metodus. Taip pat matėme kai kurias integruotas funkcijas, pvz., id(), dir(), type(), help()< kurios yra labai veiksmingos funkcijos. Mes taip pat turime python sąrašo supratimą, kuris suteikia glaustesnį ir skaitomesnį sąrašą sudaryti.