Apreneu l'estructura de dades de la llista de Python - Part 1


L'estructura de dades és una col·lecció de tipus de dades, la relació entre ells i les funcions o operacions que es poden aplicar a les dades. El tipus de dades pot ser cadena, enter, valor flotant, etc.

  1. Objectes l'estat dels quals es pot canviar un cop creat, com ara afegir, actualitzar o suprimir elements.
  2. Les llistes, el diccionari, el conjunt i el bytearray són tipus d'objectes mutables a Python.

  1. L'estat de l'objecte no es pot modificar. Un cop creat l'objecte, no podem afegir, eliminar ni actualitzar elements.
  2. String, Integer, Tuples, Frozenset són alguns dels tipus d'objectes immutables a Python.

  1. Estructura de dades homogènia: els elements de dades seran del mateix tipus de dades (p. ex.: Matriu).
  2. Estructura de dades heterogènia: els elements de dades poden no ser del mateix tipus de dades (p. ex.: llista, tuples, conjunts, etc.).

Abans d'entendre la funcionalitat de l'estructura de dades integrada, veiem algunes funcions integrades que s'utilitzaran amb objectes d'estructura de dades.

  • dir(obj): una funció integrada que retornarà l'atribut i els mètodes.
  • len(obj): retorna la longitud (el nombre d'elements) d'un objecte. L'argument pot ser una seqüència (com ara una cadena, bytes, tupla, llista o rang) o una col·lecció (com un diccionari, un conjunt o un conjunt congelat).
  • del: aquesta paraula clau integrada s'utilitza per eliminar un objecte d'un espai de noms o eliminar elements d'un objecte com una llista, un diccionari, etc.
  • type(obj): la funció type() retorna el tipus de l'objecte o un nou tipus d'objecte basat en els arguments passats.
  • id(): aquesta funció retorna la \identitat d'un objecte. Aquest és un nombre enter que es garanteix que serà únic i constant per a aquest objecte durant la seva vida útil.

Ara, com heu vist alguns detalls importants, continuem amb les estructures de dades de Python.

Python inclou estructures de dades integrades, així com els usuaris poden definir les seves pròpies estructures de dades. L'estructura de dades integrada inclou LIST, DICTIONARY, TUPLE i SET. Alguns dels exemples d'estructures de dades definides per l'usuari són STACK, QUEUES, TREE, HASHMAP, etc...

Les persones que provenen d'altres llenguatges de programació estaran molt familiaritzats amb un tipus de matriu. Però en python, no són tan habituals.

Aquí la llista és una mica similar a una matriu, però la llista ens permet emmagatzemar valors de qualsevol tipus de dades (heterogeni), mentre que la matriu només conté dades d'un tipus particular (int, float, etc.). Per utilitzar array, heu d'importar la matriu del mòdul array de manera explícita.

En aquesta sèrie d'articles de Python, analitzarem què és una estructura de dades i una estructura de dades integrada en Python.

La llista és una estructura de dades que és una col·lecció de diferents tipus de dades. Què significa \col·lecció de diferents tipus de dades? La llista pot emmagatzemar cadenes, nombres enters, valors de coma flotant, llista anidada, etc.

Els objectes de la llista són \Mutables, la qual cosa significa que els elements creats dins de la llista es poden accedir, modificar o suprimir. La llista admet la indexació. Cada element de les llistes s'assigna a una adreça i aquesta adreça es pot utilitzar per accedir o modificar el valor de l'element concret. .

  • Creeu una llista
  • Insereix/Accedeix/Modifica la llista
  • Suprimeix la llista

La llista es pot crear amb claudàtors.

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

Podem utilitzar la funció integrada type() per comprovar el tipus d'objecte.

>>> type(name)

Podem accedir als mètodes i atributs de la instància de la llista mitjançant la funció 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']

Podem esbrinar el nombre total d'elements de la llista mitjançant el mètode len().

>>> len(name)

Podem crear una llista nova a partir d'una llista existent utilitzant el mètode list.copy().

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

Podem inserir un element en una llista en qualsevol posició utilitzant el mètode 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.

Podem utilitzar el mètode list.append(x) per afegir un sol element a la llista. Això inserirà l'element al final de la llista.

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

Podem utilitzar el mètode list.extend() per afegir diversos elements a la llista.

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

També podem utilitzar l'operador + per combinar dues llistes. Ambdues llistes poden ser de diferents tipus de dades.

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

Com ja s'ha dit, els objectes són mutables. Es pot modificar un element de llista fent referència a la posició de l'índex i assignant-li un valor.

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

La llista admet indexació tant positiva com negativa.

La indexació comença des de 0 i la indexació negativa comença des de -1.

Podem accedir a l'element de la llista mitjançant la seva posició d'índex.

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

També podem utilitzar el tall per accedir als elements de la llista. El tall ens permet accedir a una sèrie d'elements definint els paràmetres inicials, finals i de pas.

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

Podem trobar el nombre d'ocurrències per a un valor determinat mitjançant el mètode list.count(x).

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

Podem trobar la posició de l'índex d'un element determinat mitjançant el mètode 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

Podem utilitzar el mètode list.reverse() per invertir els elements de la llista.

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

Podem utilitzar el mètode list.pop(x) per eliminar un element d'una llista a la posició x. Aquesta funció eliminarà l'element de la llista i mostrarà l'element eliminat. Si no s'especifica x, el mètode pop() retornarà l'últim element de la llista.

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

També podem utilitzar el mètode list.remove (x) per eliminar l'element de la llista. Aquí x pren el valor de l'element i llança un ValueError si x no és a la llista.

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

Podem fer una llista buida assignant el nom de la llista als claudàtors o utilitzant el mètode 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
[]

En lloc d'utilitzar mètodes de llista per fer la llista buida o eliminar un element de la llista, podem utilitzar la paraula clau integrada del per dur a terme aquestes accions. La paraula clau del pot suprimir un objecte de llista de la memòria o suprimir un element d'una llista o suprimir un element d'una porció.

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

La funció integrada id() retorna la \identitat d'un objecte. Aquest és un nombre enter que es garanteix que serà únic i constant per a aquest objecte durant la seva vida útil.

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

Nota: hem eliminat la variable de llista de la memòria mitjançant del(), per tant, genera un error de nom.

help() funtion:

La funció() d'ajuda integrada és molt útil per obtenir detalls sobre un objecte o mètodes concrets d'aquest objecte.

help(object)
help(object.method)

Fins ara en aquest article, hem vist com podem utilitzar una estructura de dades de llista per emmagatzemar, accedir, modificar i eliminar objectes de llista mitjançant els mètodes de llista. També hem vist algunes funcions integrades com id(), dir(), type(), help() que són funcions molt efectives. També tenim la comprensió de llistes en Python que proporciona una manera més concisa i llegible de crear una llista.