🐍Python🐍 - zajęcia 4 + kwestionariusz
*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
- czy często dodajesz/usuwasz elementy?
- 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
- odczytywać po indeksie:
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?
Potrzeba | Struktura |
---|---|
Przechowywanie listy elementów w określonej kolejności | Lista |
Przechowywanie niezmiennych danych | Krotka |
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
Metoda | Opis |
---|---|
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)