Last modified: January 27, 2025

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:

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:

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:

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:

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:

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

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:

III. Przykłady niepoprawnych kluczy:

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

Spis Treści

    Struktury danych
    1. Lista
    2. Krotka
    3. Zbiór
    4. Słownik
    5. Podsumowanie metod dostępnych dla struktur danych