Vyhledávání na webu

Naučte se datovou strukturu seznamu v Pythonu – část 1


Struktura dat je sbírka datových typů, vztahů mezi nimi a funkcí nebo operací, které lze s daty použít. Typ dat může být řetězec, Celé číslo, Plovoucí hodnota a tak dále.

Jaký je rozdíl mezi Mutable/Immutable objektem?
Proměnlivé objekty
  1. Objekty, jejichž stav lze po vytvoření změnit, jako je přidávání, aktualizace nebo odstraňování prvků.
  2. Lists, Dictionary, Set, bytearray jsou proměnlivé typy objektů v pythonu.
Neměnné objekty
  1. Stav objektu nelze změnit. Jakmile je objekt vytvořen, nemůžeme přidávat, odebírat ani aktualizovat prvky.
  2. String, Integer, Tuples, Frozenset jsou některé z neměnných typů objektů v pythonu.
Jaký je rozdíl mezi homogenní/heterogenní datovou strukturou?
  1. Homogenní datová struktura – Datové prvky budou stejného datového typu (např. pole).
  2. Heterogenní datová struktura – Datové prvky nemusí mít stejný datový typ (např. seznam, n-tice, sady atd.).
Co jsou datové typy Primitivní a Neprimitivní?

Než pochopíme funkcionalitu vestavěné datové struktury, podívejme se na několik vestavěných funkcí, které budou použity s objekty datové struktury.

  • dir(obj) – vestavěná funkce, která vrátí atribut a metody.
  • len(obj) – Vrátí délku (počet položek) objektu. Argumentem může být sekvence (například řetězec, bajty, n-tice, seznam nebo rozsah) nebo kolekce (například slovník, sada nebo zmrazená sada).
  • del – Toto vestavěné klíčové slovo se používá k odstranění objektu z jmenného prostoru nebo k odstranění položek z objektu, jako je seznam, slovník atd.
  • type(obj) – Funkce type() buď vrací typ objektu, nebo vrací objekt nového typu na základě předaných argumentů.
  • id() – Tato funkce vrací „identitu“ objektu. Jedná se o celé číslo, které je zaručeně jedinečné a konstantní pro tento objekt během jeho životnosti.

Nyní, když jste viděli několik důležitých detailů, pojďme pokračovat s datovými strukturami pythonu.

Python přichází s vestavěnými datovými strukturami a uživatelé mohou definovat své vlastní datové struktury. Vestavěná datová struktura zahrnuje LIST, DICTIONARY, TUPLE a SET. Některé příklady uživatelsky definovaných datových struktur jsou STACK, QUEUES, TREE, HASHMAP atd…

Lidé přicházející z jiných programovacích jazyků budou velmi dobře znát typ pole. Ale v pythonu nejsou tak běžné.

Zde je seznam podobný poli, ale seznam nám umožňuje ukládat hodnoty libovolného datového typu (heterogenní), zatímco pole bude obsahovat pouze data určitého typu (int, float atd…). Chcete-li použít pole, musíte pole explicitně importovat z modulu „pole“.

V této sérii článků v Pythonu se podíváme na to, co je datová struktura a vestavěná datová struktura pythonu.

SEZNAM

Seznam je datová struktura, která je sbírkou různých typů dat. Co znamená „shromažďování různých datových typů“? Seznam může ukládat řetězce, celá čísla, hodnoty s pohyblivou řádovou čárkou, vnořený seznam a tak dále.

Objekty List jsou „Mutable “, což znamená, že k položkám vytvořeným v seznamu lze přistupovat, upravovat nebo mazat. Seznam podporuje indexování. Každé položce v seznamech je přiřazena adresa a tato adresa může být použita pro přístup nebo úpravu hodnoty konkrétní položky.

  • Vytvořte seznam
  • Vložit/Zpřístupnit/Upravit seznam
  • Smazat seznam

VYTVOŘIT SEZNAM

Seznam lze vytvořit pomocí hranatých závorek.

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

Pro kontrolu typu objektu můžeme použít vestavěnou funkci type().

>>> type(name)

K metodám a atributům instance list můžeme přistupovat pomocí funkce 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']

Celkový počet položek v seznamu můžeme zjistit pomocí metody len().

>>> len(name)

Nový seznam můžeme vytvořit z existujícího seznamu pomocí metody list.copy().

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

VLOŽENÍ/PŘÍSTUP/ÚPRAVA SEZNAMU

Položku do seznamu můžeme vložit na libovolné místo pomocí metody 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.

K přidání jedné položky do seznamu můžeme použít metodu list.append(x). Tím se položka vloží na konec seznamu.

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

K přidání více položek do seznamu můžeme použít metodu list.extend().

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

Můžeme také použít operátor '+' ke spojení dvou seznamů. Oba seznamy mohou mít různé datové typy.

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

Jak již bylo uvedeno, objekty jsou proměnlivé. Položku seznamu lze upravit odkazem na pozici indexu a přiřazením hodnoty.

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

Seznam podporuje pozitivní i negativní indexování.

Indexování začíná od 0 a záporné indexování začíná od -1.

K položce seznamu můžeme přistupovat pomocí jejich pozice v indexu.

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

Pro přístup k položkám v seznamu můžeme také použít krájení. Slicing nám umožňuje přistupovat k řadě položek definováním parametrů začátku, konce a kroku.

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

Počet výskytů pro danou hodnotu můžeme zjistit pomocí metody list.count(x).

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

Pozici indexu dané položky můžeme zjistit pomocí metody 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

K obrácení položek v seznamu můžeme použít metodu list.reverse().

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

VYMAZAT SEZNAM

K odstranění položky ze seznamu na pozici x můžeme použít metodu list.pop(x). Tato funkce odstraní položku ze seznamu a zobrazí odstraněnou položku. Pokud není zadáno x, pak metoda pop() vrátí poslední položku ze seznamu.

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

Můžeme také použít metodu list.remove (x) k odstranění položky ze seznamu. Zde x převezme hodnotu položky a vyvolá ValueError, pokud x není v seznamu.

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

Seznam můžeme vyprázdnit buď přiřazením názvu seznamu do hranatých závorek nebo použitím metody 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
[]

Namísto použití metod seznamu k vyprázdnění seznamu nebo odstranění položky ze seznamu můžeme k provedení této akce použít vestavěné klíčové slovo del. Klíčové slovo “del“ může odstranit objekt seznamu z paměti nebo odstranit položku ze seznamu nebo odstranit položku z řezu.

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

Vestavěná funkce id() vrací „identitu“ objektu. Toto je celé číslo, které je zaručeno, že bude jedinečné a konstantní pro tento objekt během jeho životnosti.

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

Poznámka: Proměnnou seznamu jsme odstranili z paměti pomocí del(), proto vyvolává chybu názvu.

help() funtion:

Vestavěná nápověda function() je velmi užitečná pro získání podrobností o konkrétním objektu nebo metodách tohoto objektu.

help(object)
help(object.method)
souhrn

V tomto článku jsme zatím viděli, jak můžeme použít datovou strukturu seznamu k ukládání, přístupu, úpravě a odstraňování objektů seznamu pomocí metod seznamu. Také jsme viděli některé vestavěné funkce jako id(), dir(), type(), help()< což jsou velmi efektivní funkce. Máme také porozumění seznamu v pythonu, což poskytuje stručnější a čitelnější způsob vytváření seznamu.