Õpi Pythoni loendi andmete struktuuri - 1. osa


Andmete struktuur on andmetüüpide kogum, nende omavaheline seos ja funktsioonid või toimingud, mida saab andmetele rakendada. Andmetüüp võib olla string, täisarv, ujuv väärtus ja nii edasi.

  1. Objektid, mille olekut saab pärast selle loomist muuta, näiteks elementide lisamine, värskendamine või kustutamine.
  2. Loendid, sõnastik, komplekt, bytearray on pythonis muudetavad objektitüübid.

  1. Objekti olekut ei saa muuta. Kui objekt on loodud, ei saa me elemente lisada, eemaldada ega värskendada.
  2. String, Integer, Tuples, Frozenset on mõned pütooni muutumatut tüüpi objektid.

  1. Homogeenne andmete struktuur - andmeelemendid on sama tüüpi andmetega (nt: massiiv)
  2. Heterogeenne andmestruktuur - andmeelemendid ei pruugi olla sama tüüpi andmetega (nt: loend, kogumid, komplektid jne ...).

Enne sisseehitatud andmestruktuuri funktsionaalsuse mõistmist vaadake mõnda sisseehitatud funktsiooni, mida kasutatakse andmestruktuuri objektidega.

  • dir (obj) - sisseehitatud funktsioon, mis tagastab atribuudi ja meetodid.
  • len (obj) - tagastab objekti pikkuse (üksuste arvu). Argument võib olla jada (näiteks string, baidid, duplett, loend või vahemik) või kogu (näiteks sõnastik, komplekt või külmutatud komplekt).
  • del - seda sisseehitatud märksõna kasutatakse objekti nimeruumist kustutamiseks või objektide, näiteks loendi, sõnaraamatu jne eemaldamiseks.
  • type (obj) - funktsioon type() kas tagastab objekti tüübi või tagastab edastatud argumentide põhjal uue tüüpi objekti.
  • id() - see funktsioon tagastab objekti „identiteedi”. See on täisarv, mis on selle objekti eluea jooksul unikaalne ja konstantne.

Nüüd, kui olete näinud vähe olulisi üksikasju, jätkake pythoni andmestruktuuridega.

Pythonil on sisseehitatud andmestruktuurid, samuti saavad kasutajad ise oma andmestruktuure määratleda. Sisseehitatud andmestruktuur sisaldab LIST, DICTIONARY, TUPLE ja SET. Mõned näited kasutaja määratletud andmestruktuuride kohta on virna, järjekorrad, puud, HASHMAP jne.

Teistest programmeerimiskeeltest tulevad inimesed tunnevad massiivi tüüpi väga hästi. Kuid pythonis pole need nii levinud.

Siin on loend massiiviga sarnane, kuid loend võimaldab meil salvestada mis tahes andmetüübi (heterogeenne) väärtusi, samas kui massiiv sisaldab ainult teatud tüüpi andmeid (int, float jne ...). Massiivi kasutamiseks tuleb massiiv selgesõnaliselt importida moodulist “massiiv”.

Selles Pythoni artiklite seerias vaatleme, mis on andmestruktuur ja Pythoni sisseehitatud andmestruktuur.

Nimekiri on andmestruktuur, mis koosneb erinevat tüüpi andmetest. Mida tähendab „erinevate andmetüüpide kogumine“? Loendisse saab salvestada stringid, täisarvud, ujukoma väärtused, sisestatud loend ja nii edasi.

Loendi objektid on „muudetavad”, mis tähendab, et loendis olevatele üksustele saab juurde pääseda, neid muuta või kustutada. Loendi tugi indekseerimine. Iga loendis olev üksus on määratud aadressile ja seda aadressi saab kasutada konkreetse üksuse väärtusele juurde pääsemiseks või selle muutmiseks.

  • loendi loomine
  • Loendi sisestamine/juurdepääs/muutmine
  • Kustuta loend

Loendi saab luua nurksulgudes.

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

Objektitüübi kontrollimiseks võime kasutada sisseehitatud funktsiooni type() .

>>> type(name)

Loendieksemplari meetoditele ja atribuutidele pääseme juurde funktsiooni dir() abil.

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

Loendi üksuste koguarvu saame teada meetodi len() abil.

>>> len(name)

Uue loendi saame olemasolevast loendist luua meetodi list.copy() abil.

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

Saame üksuse loendisse lisada mis tahes asukohas, kasutades meetodit 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.

Üksiku üksuse lisamiseks loendisse võime kasutada meetodit list.append (x) . See lisab üksuse loendi lõppu.

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

Mitme üksuse lisamiseks loendisse saame kasutada meetodit list.extend() .

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

Kahe loendi ühendamiseks võime kasutada ka operaatorit + . Mõlemad loendid võivad olla erinevat tüüpi andmetega.

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

Nagu juba öeldud, on objektid muudetavad. Loendiüksust saab muuta, viidates indeksi kohale ja määrates sellele väärtuse.

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

Nimekiri toetab nii positiivset kui ka negatiivset indekseerimist.

Indekseerimine algab 0-st ja negatiivne indekseerimine -1-st.

Me pääseme loendiüksusele juurde, kasutades nende indeksi positsiooni.

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

Samuti võime loendi üksustele juurde pääseda viilutamist. Viilutamine võimaldab meil pääseda juurde mitmele üksusele, määratledes alguse, lõpu, sammu parameetrid.

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

Antud väärtuse esinemiste arvu leiame meetodi list.count (x) abil.

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

Antud üksuse indeksi positsiooni leiame meetodi list.index (x [, start [, end]]) abil.

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

Loendis olevate üksuste ümberpööramiseks võime kasutada meetodit list.reverse() .

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

Üksuse eemaldamiseks loendist asukohas x saame kasutada meetodit list.pop (x) . See funktsioon eemaldab üksuse loendist ja kuvab eemaldatud üksuse. Kui x pole määratud, tagastab meetod pop() loendi viimase üksuse.

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

Üksuse loendist eemaldamiseks võime kasutada ka meetodit list.remove (x) . Siin võtab x üksuse väärtuse ja viskab ValueError'i, kui x pole loendis.

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

Saame loendi tühjaks teha, määrates nurksulgudesse loendi nime või kasutades meetodit 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
[]

Selle asemel, et kasutada loendimeetodeid loendi tühjaks muutmiseks või üksuse eemaldamiseks loendist, võime selle toimingu tegemiseks kasutada sisseehitatud märksõna del . Märksõnaga „del” saab kustutada loendiobjekti mälust või kustutada üksuse loendist või üksuse viilust.

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

Sisseehitatud funktsioon id() tagastab objekti „identiteedi“. See on täisarv, mis on selle objekti eluea jooksul unikaalne ja konstantne.

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

Märkus. Oleme loendi muutuja mälust eemaldanud, kasutades del() , mistõttu see põhjustab nimevea.

help() funtion:

Sisseehitatud spikker function() on väga kasulik konkreetse objekti või selle objekti meetodite kohta üksikasjade saamiseks.

help(object)
help(object.method)

Siiani oleme selles artiklis näinud, kuidas saame loendiandmete struktuuri abil loendimeetodeid kasutades loendiobjekte salvestada, juurde pääseda, neid muuta, kustutada. Oleme näinud ka mõnda sisseehitatud funktsiooni, nagu id(), dir(), type(), help(), mis on väga tõhusad funktsioonid. Samuti on meil pythonis loendi mõistmine, mis pakub loendi loomiseks ülevaatlikumat ja loetavamat viisi.