Last modified: September 21, 2024
This article is written in: 馃嚨馃嚤
Struktury danych
Mamy do dyspozycji kilka r贸偶nych sposob贸w przechowywania danych, kt贸re nazywamy strukturami danych. S膮 to narz臋dzia, dzi臋ki kt贸rym mo偶emy zbiera膰 i przechowywa膰 du偶e ilo艣ci danych w spos贸b uporz膮dkowany, co znacz膮co u艂atwia prac臋 z tymi danymi.
Oto najpopularniejsze struktury danych:
I. Listy s膮 najbardziej uniwersalne i mog膮 by膰 u偶ywane wsz臋dzie tam, gdzie potrzebujemy dynamicznej, modyfikowalnej kolekcji element贸w. Doskonale nadaj膮 si臋 do przechowywania sekwencyjnych danych, kt贸re mog膮 si臋 zmienia膰. Przyk艂adowe zastosowania to:
- Przechowywanie listy zakup贸w.
- Gromadzenie wynik贸w pomiar贸w w eksperymencie.
- Przechowywanie obiekt贸w w grze komputerowej.
II. Krotki s膮 idealne do przechowywania zestaw贸w danych, kt贸re nie powinny si臋 zmienia膰 po ich utworzeniu. Cz臋sto u偶ywane jako klucze w s艂ownikach lub jako elementy zwracane przez funkcje, kt贸re zwracaj膮 wiele warto艣ci. Przyk艂ady zastosowa艅 to:
- Przechowywanie wsp贸艂rz臋dnych punktu (x, y).
- Zwracanie wielu warto艣ci z funkcji (np. status i wynik operacji).
- Przechowywanie danych konfiguracyjnych, kt贸re nie powinny by膰 modyfikowane.
III. Zbiory s膮 u偶ywane tam, gdzie potrzebujemy unikalnych element贸w i nie zale偶y nam na ich kolejno艣ci. Przydatne w operacjach matematycznych takich jak sumy, przeci臋cia i r贸偶nice zbior贸w. Przyk艂ady zastosowa艅 to:
- Przechowywanie unikalnych identyfikator贸w.
- Realizacja operacji zbiorowych, takich jak unia czy przeci臋cie.
- Filtrowanie duplikat贸w z listy.
IV. S艂owniki s膮 najlepsze do przechowywania danych w formie klucz-warto艣膰, co pozwala na szybki dost臋p do warto艣ci na podstawie klucza. Idealne do przechowywania ustrukturyzowanych danych, takich jak rekordy bazy danych czy konfiguracje. Przyk艂ady zastosowa艅 to:
- Przechowywanie konfiguracji aplikacji.
- Indeksowanie danych na podstawie unikalnych kluczy (np. numer贸w identyfikacyjnych).
- Przechowywanie s艂ownika j臋zykowego (t艂umaczenia s艂贸w).
Ka偶da z tych struktur danych ma swoje unikalne zastosowania i cechy, kt贸re sprawiaj膮, 偶e jest odpowiednia w okre艣lonych sytuacjach. Poni偶ej znajduj膮 si臋 bardziej szczeg贸艂owe opisy zastosowa艅 poszczeg贸lnych struktur danych:
Lista
Listy to uporz膮dkowane kolekcje element贸w, kt贸re mog膮 by膰 r贸偶nych typ贸w. S膮 one modyfikowalne, co oznacza, 偶e mo偶emy dodawa膰, usuwa膰 oraz modyfikowa膰 elementy na li艣cie. W li艣cie mog膮 wyst臋powa膰 duplikaty.
I. Przyk艂ad listy z艂o偶onej z kilku liczb ca艂kowitych:
lista = [3, 2, 3, 9, 10]
II. Elementy listy nie musz膮 by膰 tego samego typu:
lista = ['a', True, 0.3]
III. Aby pozna膰 liczb臋 element贸w listy, nale偶y u偶y膰 funkcji len
:
n = len(lista)
IV. Aby doda膰 element a na ko艅cu listy, u偶yj metody append
:
lista.append(a)
V. Aby doda膰 wszystkie elementy z listy lista2 na ko艅cu listy lista1, u偶yj metody extend
:
lista1.extend(lista2)
VI. Aby wstawi膰 element a na pozycj臋 i, u偶yj metody insert
:
lista.insert(i,a)
VII. Aby usun膮膰 pierwsze wyst膮pienie elementu a z listy, u偶yj metody remove
:
lista.remove(a)
VIII. Aby usun膮膰 element z listy znajduj膮cy si臋 na pozycji i oraz zwr贸ci膰 go jako wynik, u偶yj metody pop
:
element = lista.pop([i])
IX. Aby znale藕膰 liczb臋 wyst膮pie艅 elementu a w li艣cie, u偶yj metody count
:
licznik = lista.count(a)
X. Aby posortowa膰 list臋, u偶yj metody sort
:
lista.sort()
XI. Aby odwr贸ci膰 kolejno艣膰 element贸w w li艣cie, u偶yj metody reverse
:
lista.reverse()
XII. Aby przy pomocy p臋tli przej艣膰 przez elementy listy, u偶yj s艂owa kluczowego for
:
for element in lista:
print(element)
XIII. Aby otrzyma膰 element i indeks, u偶yj funkcji enumerate
:
for indeks, element in enumerate(lista):
print(f'{indeks}: {element}')
XIV. Aby przy pomocy p臋tli przej艣膰 przez elementy dw贸ch list r贸wnej d艂ugo艣ci, u偶yj funckji zip
:
for elem_a, elem_b in zip(lista_a, lista_b):
print(f'element a: {elem_a}; element b: {elem_b}')
Krotka
Krotki s膮 podobne do list, ale s膮 niemodyfikowalne. Oznacza to, 偶e po ich utworzeniu nie mo偶emy zmienia膰 ich zawarto艣ci. Krotki s膮 cz臋sto u偶ywane tam, gdzie chcemy zachowa膰 sta艂o艣膰 danych. Podobnie jak listy, krotki mog膮 zawiera膰 duplikaty.
Krotek zamiast list, u偶ywamy gdy:
- Liczy si臋 szybko艣膰.
- Chcemy zabezpieczy膰 dane przed nadpisaniem.
I. Przyk艂ad krotki sk艂adaj膮cej si臋 z kilku liczb ca艂kowitych:
krotka = (3, 2, 3, 9, 10)
II. Elementy krotki nie musz膮 by膰 tego samego typu:
krotka = ('a', True, 0.3)
III. Aby rozpakowa膰 krotk臋 sk艂adaj膮c膮 si臋 z trzech element贸w i zapisa膰 je w trzech zmiennych, u偶yj:
a, b, c = krotka
IV. Aby znale藕膰 liczb臋 element贸w krotki, u偶yj:
len(krotka)
V. Aby przy pomocy p臋tli przej艣膰 przez elementy krotki, u偶yj:
for element in krotka:
print(element)
VI. Aby otrzyma膰 element i indeks, u偶yj funkcji enumerate
:
for indeks, element in enumerate(krotka):
print(f'{indeks}: {element}')
VII. Aby przy pomocy p臋tli przej艣膰 przez elementy dw贸ch krotek r贸wnej d艂ugo艣ci, u偶yj funckji zip
:
for elem_a, elem_b in zip(krotka_a, krotka_b):
print(f'element a: {elem_a}; element b: {elem_b}')
Zbi贸r
Zbiory to nieuporz膮dkowane kolekcje unikalnych element贸w. Ze wzgl臋du na ich unikalno艣膰, zbiory s膮 u偶yteczne tam, gdzie interesuj膮 nas jedynie r贸偶norodne warto艣ci.
I. Aby utworzy膰 pusty zbi贸r, u偶yj:
zbior = set()
II. Aby utworzy膰 zbi贸r z element贸w podanych jako argumenty, u偶yj:
zbior = set([element1, element2, element3])
III. Aby utworzy膰 zbi贸r z element贸w wyst臋puj膮cych w iterowalnym obiekcie (np. li艣cie), u偶yj:
zbior = set(iterowalny_obiekt)
IV. Aby sprawdzi膰, czy element jest w zbiorze, u偶yj:
element in zbior
V. Aby doda膰 element do zbioru, u偶yj:
zbior.add(element)
VI. Aby usun膮膰 element ze zbioru, u偶yj:
zbior.remove(element)
VII. Aby usun膮膰 element ze zbioru, je艣li istnieje, bez generowania b艂臋du, u偶yj:
zbior.discard(element)
VIII. Aby usun膮膰 losowy element ze zbioru, u偶yj:
zbior.pop()
IX. Aby usun膮膰 wszystkie elementy ze zbioru, u偶yj:
zbior.clear()
X. Aby znale藕膰 liczb臋 element贸w w zbiorze, u偶yj:
len(zbior)
XI. Aby po艂膮czy膰 zbiory, u偶yj operatora |
:
zbior1 | zbior2
XII. Aby wy艣wietli膰 elementy wsp贸lne dla dw贸ch zbior贸w, u偶yj operatora &
:
zbior1 & zbior2
XIII. Aby wy艣wietli膰 elementy wyst臋puj膮ce w jednym zbiorze, ale nie w drugim, u偶yj operatora ^
:
zbior1 ^ zbior2
XIV. Aby wy艣wietli膰 elementy z pierwszego zbioru, ale nie z drugiego, u偶yj operatora -
:
zbior1 - zbior2
XV. Aby sprawdzi膰, czy zbi贸r jest podzbiorem innego zbioru, u偶yj operatora <=
:
zbior1 <= zbior2
S艂ownik
S艂owniki to kolekcje par klucz-warto艣膰. Klucze w s艂owniku musz膮 by膰 unikalne, ale warto艣ci mog膮 si臋 powtarza膰. S艂owniki s膮 szczeg贸lnie przydatne, gdy chcemy przechowywa膰 dane w spos贸b zorganizowany, np. informacje o osobie, gdzie kluczem jest nazwa atrybutu (np. "imi臋"), a warto艣ci膮 jest konkretne dane (np. "Anna").
I. W s艂owniku mo偶na u偶ywa膰 jako kluczy dowolnych typ贸w danych, kt贸re s膮 niemutowalne (tj. nie mog膮 by膰 zmieniane). Do niemutowalnych typ贸w danych w Pythonie zaliczaj膮 si臋:
- liczby ca艂kowite (int)
- liczby zmiennoprzecinkowe (float)
- napisy (str)
- krotki (tuple)
Nie mo偶na natomiast u偶ywa膰 jako kluczy mutowalnych typ贸w danych, takich jak listy, zbiory lub s艂owniki, poniewa偶 nie spe艂niaj膮 one wymogu niemutowalno艣ci.
II. Przyk艂ady poprawnych kluczy:
- liczba ca艂kowita:
slownik[42]
- napis:
slownik['klucz']
- krotka:
slownik[(1, 2, 3)]
III. Przyk艂ady niepoprawnych kluczy:
- lista:
slownik[[1, 2, 3]]
- zbi贸r:
slownik{1, 2, 3}
- s艂ownik:
slownik{'klucz': 'wartosc'}
IV. Przyk艂ad s艂ownika zawieraj膮cego kilka par klucz-warto艣膰:
slownik = {'klucz1': 3, 'klucz2': 2, 'klucz3': 3}
V. Elementy s艂ownika nie musz膮 by膰 tego samego typu:
slownik = {'klucz1': 'a', 'klucz2': True, 'klucz3': 0.3}
VI. Aby znale藕膰 liczb臋 element贸w s艂ownika, u偶yj:
len(slownik)
VII. Aby doda膰 element a pod kluczem 'klucz4', u偶yj:
slownik['klucz4'] = a
VIII. Aby zmieni膰 warto艣膰 pod kluczem 'klucz4', u偶yj:
slownik['klucz4'] = nowa_wartosc
IX. Aby usun膮膰 element pod kluczem 'klucz4', u偶yj:
del slownik['klucz4']
X. Aby sprawdzi膰 czy klucz 'klucz4' istnieje w s艂owniku, u偶yj:
'klucz4' in slownik
XI. Aby przy pomocy p臋tli przej艣膰 przez elementy s艂ownika, u偶yj:
for klucz, wartosc in slownik.items():
print(f'{klucz}: {wartosc}')
XII. Aby przy pomocy p臋tli przej艣膰 tylko przez klucze s艂ownika, u偶yj:
for klucz in slownik:
print(klucz)
XIII. Aby przy pomocy p臋tli przej艣膰 tylko przez warto艣ci s艂ownika, u偶yj:
for wartosc in slownik.values():
print(wartosc)
Podsumowanie metod dost臋pnych dla struktur danych
Struktura danych | Metoda | Opis | Przyk艂ad |
Lista | append() |
Dodaje element na ko艅cu listy. | lista.append(5) |
extend() |
Dodaje wszystkie elementy z podanej kolekcji do listy. | lista.extend([6, 7, 8]) |
|
insert() |
Wstawia element na okre艣lonej pozycji. | lista.insert(1, 'a') |
|
remove() |
Usuwa pierwsze wyst膮pienie okre艣lonego elementu. | lista.remove('a') |
|
pop() |
Usuwa i zwraca element z okre艣lonej pozycji (domy艣lnie ostatni element). | lista.pop() |
|
clear() |
Usuwa wszystkie elementy z listy. | lista.clear() |
|
index() |
Zwraca indeks pierwszego wyst膮pienia okre艣lonego elementu. | lista.index(5) |
|
count() |
Zwraca liczb臋 wyst膮pie艅 okre艣lonego elementu. | lista.count(5) |
|
sort() |
Sortuje elementy listy w miejscu. | lista.sort() |
|
reverse() |
Odwraca kolejno艣膰 element贸w listy. | lista.reverse() |
|
Krotka | count() |
Zwraca liczb臋 wyst膮pie艅 okre艣lonego elementu. | krotka.count(5) |
index() |
Zwraca indeks pierwszego wyst膮pienia okre艣lonego elementu. | krotka.index(5) |
|
Zbi贸r | add() |
Dodaje element do zbioru. | zbior.add(5) |
remove() |
Usuwa element ze zbioru; wyrzuca b艂膮d, je艣li element nie istnieje. | zbior.remove(5) |
|
discard() |
Usuwa element ze zbioru, je艣li istnieje. | zbior.discard(5) |
|
pop() |
Usuwa i zwraca losowy element ze zbioru. | zbior.pop() |
|
clear() |
Usuwa wszystkie elementy ze zbioru. | zbior.clear() |
|
union() |
Zwraca nowy zbi贸r b臋d膮cy sum膮 zbior贸w. | zbior.union(inny_zbior) |
|
intersection() |
Zwraca nowy zbi贸r b臋d膮cy przeci臋ciem zbior贸w. | zbior.intersection(inny_zbior) |
|
difference() |
Zwraca nowy zbi贸r b臋d膮cy r贸偶nic膮 zbior贸w. | zbior.difference(inny_zbior) |
|
symmetric_difference() |
Zwraca nowy zbi贸r b臋d膮cy symetryczn膮 r贸偶nic膮 zbior贸w. | zbior.symmetric_difference(inny_zbior) |
|
S艂ownik | get() |
Zwraca warto艣膰 dla okre艣lonego klucza. | slownik.get('klucz') |
keys() |
Zwraca widok wszystkich kluczy w s艂owniku. | slownik.keys() |
|
values() |
Zwraca widok wszystkich warto艣ci w s艂owniku. | slownik.values() |
|
items() |
Zwraca widok wszystkich par klucz-warto艣膰 w s艂owniku. | slownik.items() |
|
pop() |
Usuwa i zwraca warto艣膰 dla okre艣lonego klucza. | slownik.pop('klucz') |
|
popitem() |
Usuwa i zwraca ostatni膮 par臋 klucz-warto艣膰. | slownik.popitem() |
|
clear() |
Usuwa wszystkie elementy ze s艂ownika. | slownik.clear() |
|
update() |
Aktualizuje s艂ownik o podane pary klucz-warto艣膰. | slownik.update({'klucz2': 'wartosc2'}) |
|
setdefault() |
Zwraca warto艣膰 dla okre艣lonego klucza, je艣li klucz nie istnieje dodaje go z warto艣ci膮 domy艣ln膮. | slownik.setdefault('klucz', 'domyslna_wartosc') |