🐍Python🐍 - zajęcia 4 + kwestionariusz

🐍Python🐍 - zajęcia 4 + kwestionariusz
Photo by Joshua Dixon / Unsplash

*listy, krotki, zbiory i słowniki - zastosowanie, wady, zalety, metody

Kryteria wyboru sposobu przechowywania danych

🔑 1 . Rodzaj danych

a. czy dane mają być uporządkowane?

b. czy potrzebujemy kluczy?

c. czy dane się powtarzają?

Potrzeba Struktura danych
Lista elementów w kolejności lista (list)
Unikalne elementy bez kolejności zbiór (set)
Klucz-wartość słownik (dict)
Stała, niemodyfikowalna lista krotka(tuple)

🔄 2. Częstość operacji i ich rodzaj

    1. czy często dodajesz/usuwasz elementy?
    2. czy często wyszukujesz dane?

📦 3. Rozmiar danych

Duże zbiory danych mogą wymagać struktur zoptymalizowanych pod względem pamięci

🔒 4. Niezmienność danych

Jeśli dane mają być niezmienne (np. jako klucz w słowniku), wybieramy np. krotkę, a nie listę.

Lista

  • Tworzy się ją za pomocą nawiasów kwadratowych
Zaleta LISTY Opis
🧩 Elastyczność Można przechowywać różne typy danych
➕ Zmienność Można dodawać, usuwać i zmieniać elementy
🔢 Kolejność Elementy mają zachowaną kolejność
🔁 Iterowalność Można łatwo przeglądać elementy pętlą
🔄 Metody wbudowane Takie jak sort(), reverse(), count(), index()
Wada LISTY Dlaczego może przeszkadzać
🐌 Wolne wyszukiwanie lista.index(x) jest wolne przy dużych listach (O(n))
🧮 Duplikaty Lista nie wymusza unikalności elementów
🧷 Zużycie pamięci Każdy element to osobny obiekt – więcej pamięci niż np. array
🔁 Brak szybkiego dostępu po kluczu Nie nadaje się jako struktura "klucz–wartość"

🚫 Do czego nie używać listy

Nie używaj listy, gdy... Zamiast tego użyj...
Potrzebujesz unikalnych elementów zbiór (set)
Chcesz szybki dostęp po kluczu słownik (dict)
Potrzebujesz niezmiennej kolekcji krotka (tuple)
Operujesz dużo na obu końcach kolejki kolejka deque z collections

Lista - metody

Metoda Opis Przykład Wynik
append(x) Dodaje element x na koniec listy lista.append(5) [1, 2, 3, 5]
extend(iterable) Rozszerza listę o elementy z innej listy/iterowalnego lista.extend([4, 5]) [1, 2, 3, 4, 5]
insert(i, x) Wstawia x na pozycję i lista.insert(1, 10) [1, 10, 2, 3]
remove(x) Usuwa pierwsze wystąpienie x lista.remove(2) [1, 3]
pop([i]) Usuwa i zwraca element z pozycji i (domyślnie ostatni) lista.pop() lub lista.pop(1) 3 lub [1, 2]
clear() Usuwa wszystkie elementy z listy lista.clear() []
index(x) Zwraca indeks pierwszego wystąpienia x lista.index(3) 2
count(x) Liczy, ile razy x występuje w liście lista.count(2) 1
sort() Sortuje listę rosnąco (in-place) lista.sort() [1, 2, 3]
sorted(lista) Zwraca nową posortowaną listę (funkcja, nie metoda) sorted(lista) [1, 2, 3]
reverse() Odwraca kolejność elementów w liście lista.reverse() [3, 2, 1]
copy() Tworzy kopię listy nowa = lista.copy() [1, 2, 3]

Krotka

  • Tworzy się ją za pomocą nawiasów okrągłych
  • Może zawierać różne typy danych (np. liczby, napisy, inne krotki).
  • Pojedynczy element wymaga przecinka:
jedna = (5,) # bez przecinka to byłaby liczba
  • Można:
      • odczytywać po indeksie: krotka[0]
      • iterować: przechodzić w pętli for
      • gnieździć: w środku mogą być inne struktury, np. listy
Zaleta Opis
Niezmienność Chroni dane przed przypadkową zmianą
Szybkość Krotki działają szybciej niż listy
Bezpieczne Mogą być używane jako klucze w słownikach (jeśli nie zawierają list)
Strukturalność Nadają się do reprezentowania stałych struktur danych (np. współrzędne, dane kontaktowe)

Wada Dlaczego może przeszkadzać
🚫 Brak możliwości modyfikacji Nie można nic zmienić, dodać ani usunąć
🧩 Mniej metod Krotki mają bardzo mało wbudowanych metod (np. brak append(), remove())
🔄 Trzeba utworzyć nową krotkę Jeśli chcesz coś zmienić, musisz stworzyć nową od zera

  • 🚫 Do czego nie używać krotki
Nie używaj krotki, gdy... Zamiast tego użyj...
Potrzebujesz edytować dane Lista (list)
Masz dużo operacji typu dodaj/usuń Lista (list) lub kolejka (deque)
Dane mają być unikalne Zbiór (set)
Potrzebujesz klucz–wartość Słownik (dict)

KROTKI- metody

Metoda / funkcja Opis Przykład
count(x) Liczy, ile razy x występuje w krotce (1, 2, 2, 3).count(2)2
index(x) Zwraca indeks pierwszego wystąpienia x (1, 2, 3).index(2)1
len(krotka) Liczy elementy len((1, 2, 3))3
sum(krotka) Suma liczb sum((4, 5, 6))15

🧾 Różnice praktyczne: LISTA vs KROTKA

Cecha Lista (list) Krotka (tuple)
Zmienność ✅ Tak ❌ Nie
Szybkość działania 🐢 Wolniejsza ⚡ Szybsza
Ilość metod Dużo (np. append) Mało (count, index)
Można jako klucz w dict ❌ Nie ✅ Tak (jeśli tylko zawiera niemodyfikowalne typy)
Typowe zastosowania Lista danych do obróbki Stałe zestawy danych, współrzędne

🔧 Kiedy używać której struktury?

PotrzebaStruktura
Przechowywanie listy elementów w określonej kolejnościLista
Przechowywanie niezmiennych danychKrotka
Przechowywanie danych w formacie klucz: wartośćSłownik
Przechowywanie unikalnych elementów (bez duplikatów)Zbiór

Słownik

✅ Co wolno robić i jak to działa

1. Klucz musi być unikalny

Nie możesz mieć dwóch takich samych kluczy.

Jeśli wpiszesz dwa razy ten sam klucz, zostanie nadpisany.

2. Klucz musi być niemutowalny

Kluczem może być np. str, int, float, bool, tuple – ale nie list czy dict.

3. Wartością może być cokolwiek

Wartością może być liczba, tekst, lista, słownik, a nawet funkcja.

✳️ Najważniejsze operacje ze słownikiem

– Tworzenie słownika -> Przypisujesz dane w formacie: {"klucz": wartość}

– Odczytywanie wartości -> Dostęp po kluczu: słownik["klucz"]

– Dodawanie nowej pary -> Po prostu przypisujesz nową wartość: słownik["nowy"] = coś

– Nadpisywanie wartości -> Jeśli podasz istniejący klucz – wartość zostanie zmieniona.

– Usuwanie elementu -> Użyj del słownik["klucz"] lub słownik.pop("klucz")

Zbiór

  • Zbiór to kolekcja unikalnych, nieuporządkowanych elementów.
  • Przypomina matematyczny zbiór
  • Nie przechowuje duplikatów
  • Nie gwarantuje zachowania kolejności
  • 🛠️ Jak tworzyć zbiory?
# 1. Za pomocą nawiasów klamrowych
zbior = {1, 2, 3}

# 2. Za pomocą funkcji set()
zbior2 = set([1, 2, 2, 3])  # Duplikaty zostaną usunięte

Zalety zbiorów:

🔹 Bardzo szybkie sprawdzanie obecności elementów (x in zbior)

🔹 Automatyczne usuwanie duplikatów

🔹 Dobre do operacji na zbiorach: suma, przecięcie, różnica

Wady / ograniczenia

❗ Brak uporządkowania – nie można odwoływać się przez indeks: zbior[0] ➜ błąd

❗ Elementy muszą być hashowalne (np. nie można dodać listy lub słownika)

❗ Brak gwarancji kolejności – nie nadaje się tam, gdzie ważna jest kolejność dodawania

⚠️ Do czego NIE używać zbiorów

Nie używaj zbiorów gdy: Dlaczego?
Chcesz zachować kolejność elementów Set nie zachowuje kolejności (użyj listy)
Potrzebujesz duplikatów Set automatycznie je usuwa
Chcesz odwoływać się po indeksie Set nie obsługuje indeksów
Elementy są niehashowalne (np. listy) Spowoduje błąd


🧰 Najważniejsze metody zbiorów

MetodaOpis
add(x)Dodaje element x
remove(x)Usuwa x – błąd jeśli brak
discard(x)Usuwa x, ale bez błędu jeśli nie ma
pop()Usuwa losowy element
clear()Usuwa wszystkie elementy
copy()Zwraca kopię zbioru
update(other)Dodaje elementy z innego zbioru / iterowalnego
union(other) (``)
intersection(other) (&)Zwraca część wspólną
difference(other) (-)Zwraca różnicę zbiorów
symmetric_difference(other) (^)Zwraca elementy różne dla obu zbiorów
issubset(other)Czy zbiór jest podzbiorem?
issuperset(other)Czy zbiór zawiera inny zbiór?
isdisjoint(other)Czy zbiory są rozłączne?

📚 Zadanie domowe

Zadanie: Uzupełnić kwestionariusz rozpoczęty na zajęciach.

kwestionariusz = {
      "Jak węże 'czują' zapachy?" : [
            ("Nie czują", -0.5),
            ("Nosem", -0.5),
            ("Językiem", 1)
      ],
      "Jaki wąż jest najdłuższy?" : [
          ("Pyton siatkowy", 1),
          ("Kobra", -0.5),
          ("Pyton królewski", -0.5)
      ]
      ,
      "Co wyróżnia żółwia słoniowego z Galapagos?" : [
          ("Potrafi pływać z prędkością 20 km/h", -0.5),
          ("Ma miękki pancerz, który zmienia kolor", -0.5),
          ("Jest jednym z największych żółwi lądowych na świecie", 1)
      ]
      ,
      "Dlaczego kuoka nazywana jest „najsłodszym zwierzęciem świata?" : [  
            (" Bo wygląda jakby ciągle się uśmiechała", 1),
            (" Bo ma miękkie futro i fioletowy język", -0.5),
            ("Bo daje się głaskać każdemu człowiekowi",-0.5)
      ]
      ,
      "Ile lat może żyć rekin arktyczny (grenlandzki)?" : [  
            ("Ponad 400 lat", 1),
            ("Około 150 lat", -0.5),
            ("Do 70 lat",-0.5)
      ]
      ,
      "Co pomaga panterze śnieżnej przetrwać w zimnym klimacie?" : [  
            ("Ma specjalne gruczoły ogrzewające krew", -0.5),
            ("Ma bardzo gęste, grube futro i szerokie łapy", 1),
            ("Zapada w sen zimowy na 3 miesiące",-0.5)
      ]
      ,
      "Dlaczego alpaki często plują?" : [  
            ("Aby wyrazić niezadowolenie lub pokazać dominację", 1),
            ("Bo mają za dużo śliny", -0.5),
            ("Bo to sposób, w jaki się porozumiewają z ludźmi",-0.5)
      ]
      ,
      "Jak słonie indyjskie okazują emocje?" : [  
            ("Przez dotyk, dźwięki i ruchy trąby", 1),
            ("Przez zmianę koloru skóry", -0.5),
            ("Poprzez machanie uszami w różne strony",-0.5)
      ]
      ,
      "Ile serc ma ośmiornica?" : [  
            ("1", -0.5),
            ("8", -0.5),
            ("3",1)
      ]
      ,
      "Ile serc ma ośmiornica?" : [  
            ("1", -0.5),
            ("8", -0.5),
            ("3",1)
      ]
      
}

Kod proszący o wypisanie pytań:

for pytania in kwestionariusz:
      print(pytania)