10. Listy
Zmienne, które dotychczas uzywamy, zawierały tylko jeden element - string, liczbę, czy wartość logiczną. Czasami jednak musimy skorzystać z całej listy danych. Do ich przechowywania służą nam listy zwane tez tablicami.
pusta_lista = []
lista = ["kapelusz", 34, True, "eliksir", 45, [67, 56, "czerwony"]]
Wyświetl te dwie zmienne.
Jak widać, listę tworzymy zapisując dane pomiędzy kwadratowymi nawiasami i oddzielając te elementy od siebie przecinkami. W liście możemy przechowywać różne typy danych: stringi, liczby, zmienne typu logicznego, a nawet inne listy.
Stwórzmy np. listę znajomych:
friends = ["Michał", "Marta", "Mikołaj", "John", "Natalia", "Ania"]
Aby wyświetlić element listy, odwołujemy się do listy i pozycji danego elementu.
UWAGA!
Kolejność elementów liczymy od 0. Tak więc:
print(friends[0])
# >>> Michał
print(friends[3])
# >>> John
W swoim pliku Python stwórz teraz listę o nazwie “group”, która zawiera imiona wszystkich osób z Twojej grupy, z którą pracujesz na warsztatach. Następnie wypisz w konsoli imię pierwszej i ostatniej zapisanej osoby.
Podobnie jak stringi, długość listy możemy ustalić dzięki funkcji len() jak i skorzystać z ujemnego indeksu.
print(len(friends))
# >>> 6
Dodajmy kolejne imię
Do dodawania nowego elementu służy metoda append():
friends.append('Kasia')
print(friends)
# >>> ["Michał", "Marta", "Mikołaj", "John", "Natalia", "Ania", "Kasia"]
Za jej pomocą dodajemy nowy element na końcu listy.
Dodaj do swojej listy “group” jeszcze jedno dowolne imię używając do tego metody append()
, a następnie wypisz je w konsoli.
Możemy również nadpisać istniejący element listy o określonej pozycji:
friends[2] = "Tomek"
print(friends)
# >>> ["Michał", "Marta", "Tomek", "John", "Natalia", "Ania", "Kasia"]
Nadpisz ostatnio dodane do swojej listy imię innym. Raz jeszcze wypisz ostatnie imię w konsoli.
Różne listy możemy dodać do siebie.
Do listy z imionami osób z grupy i chcemy dodać drugą listę z imionami przyjaciół z grupy obok.
Aby stworzyć listę, w której znajdą się imiona wszystkich Twoich przyjaciół, możemy użyć operatora +
:
work_friends = ["Michał", "Marta", "Tomek", "John", "Natalia", "Ania", "Kasia"]
next_table = ["Asia", "Kamil", "Bartek", "Ola", "Weronika", "Czarek"]
all_friends = work_friends + next_table
print(all_friends)
# >>> ["Michał", "Marta", "Tomek", "John", "Natalia", "Ania", "Kasia", "Asia", "Kamil", "Bartek", "Ola", "Weronika", "Czarek"]
Możemy też użyć metody extend()
, która dodaje wszystkie elementy z jednej listy do drugiej.
work_friends = ["Michał", "Marta", "Tomek", "John", "Natalia", "Ania", "Kasia"]
next_table = ["Asia", "Kamil", "Bartek", "Ola", "Weronika", "Czarek"]
work_friends.extend(next_table)
print(work_friends)
# >>> ["Michał", "Marta", "Tomek", "John", "Natalia", "Ania", "Kasia", "Asia", "Kamil", "Bartek", "Ola", "Weronika", "Czarek"]
❓ Sprawdź w konsoli, jak wygląda nowa lista powstała za pomocą +
lub extend()
. Czy widzisz róznice w sposobie ich uzywania?
By “pobrać” kawałek listy używamy mechanizmu nazywanego “slicing” (krojenie). Określamy od którego elementu chcemy ciąć i na którym chcemy skończyć:
friends = ["Michał", "Marta", "Tomek", "John", "Natalia", "Ania", "Kasia"]
part = friends[1:4]
print(part)
# >>> ["Marta", "Tomek", "John"]
Zwróć uwagę, że friends[1:4]
oznacza elementy od pozycji 1 (włącznie) do pozycji 4 (wyłącznie). Czyli na ostatnim elemencie się zatrzymaj i go nie wliczaj.
Stwórz teraz jeszcze jedną listę, której elementami będą pierwsze i drugie imię z listy “group”. Użyj do tego slicing.
Do usuwania elementów z listy służy kilka metod:
Metoda pop() - usuwa i zwraca ostatni element (lub element o określonej pozycji):
friends = ["Michał", "Marta", "Tomek", "John", "Natalia", "Ania", "Kasia"]
usuniety_element = friends.pop()
print(usuniety_element) # >>> Kasia
print(friends) # >>> ["Michał", "Marta", "Tomek", "John", "Natalia", "Ania"]
# Możemy też usunąć element o konkretnej pozycji:
friends.pop(2)
print(friends) # >>> ["Michał", "Marta", "John", "Natalia", "Ania"]
Metoda remove() - usuwa pierwsze wystąpienie określonego elementu:
friends = ["Michał", "Marta", "Tomek", "John", "Natalia", "Ania", "Kasia"]
friends.remove("Tomek")
print(friends)
# >>> ["Michał", "Marta", "John", "Natalia", "Ania", "Kasia"]
Słowo kluczowe del - usuwa element o określonej pozycji:
friends = ["Michał", "Marta", "Tomek", "John", "Natalia", "Ania", "Kasia"]
del friends[2]
print(friends)
# >>> ["Michał", "Marta", "John", "Natalia", "Ania", "Kasia"]
Usuń teraz za pomocą jednej z powyższych metod pierwsze imię z listy “group”.
Wstawienie elementu w określone miejsce
Do wstawienia elementu w konkretne miejsce służy metoda insert():
friends = ["Michał", "Marta", "John", "Natalia", "Ania", "Kasia"]
friends.insert(2, "Patrycja")
print(friends)
# >>> ["Michał", "Marta", "Patrycja", "John", "Natalia", "Ania", "Kasia"]
Pierwszy parametr to pozycja, w którą chcemy wstawić element, drugi to wartość elementu.
Wyszukiwanie elementu
Do wyszukiwania pozycji elementu służy metoda index(). Zwraca ona indeks danego elementu lub wywołuje błąd, jeśli go nie znajdzie:
friends = ["Michał", "Marta", "Tomek", "John", "Natalia", "Ania", "Kasia"]
pozycja = friends.index("Marta")
print(pozycja)
ale
friends = ["Michał", "Marta", "Tomek", "John", "Natalia", "Ania", "Kasia"]
pozycja = friends.index("Adam") # błąd!
print(pozycja)
Stąd:
if "Marta" in friends:
pozycja = friends.index("Marta")
print(f"Marta znajduje się na pozycji {pozycja}")
else:
print("Marty nie ma w tej liście")
Możemy też sprawdzić, czy element istnieje w liście używając operatora in:
if "Marta" in friends:
print("Marta znajduje się w tej liście!")
else:
print("Marty nie ma w tej liście")
Korzystając z index()
sprawdź jaką pozycję ma Twoje imię w liście “group”.
Pętla po liście
Pętla to doskonały sposób przechodzenia (iterowania) po elementach listy. Wykorzystajmy ją do wypisania naszych znajomych. Aby wypisać jakiś element listy, określamy jego indeks:
friends = ["Michał", "Marta", "Tomek", "John", "Natalia", "Ania", "Kasia"]
print(friends[0])
print(friends[1])
print(friends[2])
print(friends[3])
# ...
Ale pojawiają się dwa problemy. Po pierwsze, będzie to mało optymalne. Po drugie, co jeśli nie wiem ile jest elementów na liście i jak długo mam powtarzać ten sam kod?
Spróbujmy więc pętli for
z range()
:
friends = ["Michał", "Marta", "Tomek", "John", "Natalia", "Ania", "Kasia"]
for i in range(len(friends)):
print(friends[i])
Używamy range(len(friends))
, co da nam liczby od 0 do długości listy minus 1 - dokładnie to, czego potrzebujemy do indeksowania.
Ale Python oferuje jeszcze prostszy sposób - możemy iterować bezpośrednio po elementach listy:
friends = ["Michał", "Marta", "Tomek", "John", "Natalia", "Ania", "Kasia"]
for friend in friends:
print(friend)
To jest najbardziej pythonowy (prawdziwie pythoński) sposób! 🐍
Przećwiczmy to jeszcze wracając do naszej wiadomości. Powiedzmy, że chcemy ją spersonalizować i wyświetlić, np.
“Cześć Michał! Miło nam Cię powitać na kursie Pythona!”
Wystarczy do naszej wcześniejszej pętli dodać brakujący tekst powitania:
friends = ["Michał", "Marta", "Tomek", "John", "Natalia", "Ania", "Kasia"]
for friend in friends:
print(f"Cześć {friend}! Miło nam Cię powitać na kursie Pythona!")
Możemy też użyć łączenia stringów:
for friend in friends:
print("Cześć " + friend + "! Miło nam Cię powitać na kursie Pythona!")
🧪 Zadanie
Używając pętli for
spraw, aby w konsoli pojawił się napis witający na kursie Pythona wszystkie osoby zapisane w Twojej liście “group”. Tekst ma być następujący: “Cześć [tu imię osoby]! Miło nam Cię powitać na kursie Pythona!”.
Ciekawostka: Enumerate
- gdy potrzebujemy i indeksu i wartości. Czasami potrzebujemy zarówno indeksu elementu, jak i jego wartości. Do tego służy funkcja
enumerate()
:
friends = ["Michał", "Marta", "Tomek", "John", "Natalia", "Ania", "Kasia"]
for i, friend in enumerate(friends):
print(f"{i}: {friend}")
To wypisze:
0: Michał
1: Marta
2: Tomek
3: John
4: Natalia
5: Ania
6: Kasia
🧪 Zadanie
W starym notatniku profesora zaklęć odnaleziono dziwną wiadomość:
“Verba tantum huius scripti quae septem litteris longiora sunt verissima huius incantationis pars sunt — sed ea intellegit tantum is, cui mens sapientia illuminata est.”
Legenda głosi, że tylko słowa dłuższe niż 7 liter są prawdziwymi składnikami zaklęcia, które można aktywować.
Twoje zadanie:
- Zapisz ten tekst do zmiennej
tekst
- Podziel go na słowa (użyj pewnej metody typu string)
- Utwórz pustą listę
zaklecie
- Przejdź przez każde słowo w pętli i:
- jeśli ma więcej niż 7 znaków, dodaj je do listy
zaklecie
- jeśli ma więcej niż 7 znaków, dodaj je do listy
- Na końcu wypisz zawartość listy
zaklecie
– to Twoje aktywne słowa mocy ✨
💡 Podpowiedź
Możesz usunąć znaki interpunkcyjne przed sprawdzaniem długości słowa (
.strip(".,")
) Bonus: swoje zaklęcie wynikowe połączyć w jeden tekst metodąjoin()
Dodatkowe metody list
Python oferuje wiele przydatnych metod do pracy z listami:
count() - zlicza wystąpienia elementu:
lista = [1, 2, 3, 2, 2, 4]
print(lista.count(2)) # >>> 3
reverse() - odwraca listę:
lista = [1, 2, 3, 4, 5]
lista.reverse()
print(lista) # >>> [5, 4, 3, 2, 1]
sort() - sortuje listę:
lista = [3, 1, 4, 1, 5, 9, 2, 6]
lista.sort()
print(lista) # >>> [1, 1, 2, 3, 4, 5, 6, 9]
clear() - usuwa wszystkie elementy z listy:
lista = [1, 2, 3, 4, 5]
lista.clear()
print(lista) # >>> []
🧪 Zadanie: Najpotężniejsza liczba
Masz listę liczb przedstawiających moc magicznych iskier:
moce = [3, 7, 2, 9, 5, 9, 4]
Twoim zadaniem jest:
- Wypisać wszystkie moce po kolei
- Znaleźć największą moc (czyli najpotężniejszą iskrę!)
- Wypisać wszystkie moce równe tej największej (jeśli jest ich więcej niż jedna)
Spróbuj to zrobić za pomocą pętli bez metody max()
🧙♀️ WSKAZÓWKA
Użyj zmiennej
max_moc
, która na początku ma wartość0
.
W pętlifor
porównuj każdą moc i aktualizujmax_moc
, jeśli znajdziesz większą.
🧪 Zadanie: Inwentarz eliksirów
Profesor Infusora, mistrzni naparów, zostawiła na tablicy nieuporządkowaną listę eliksirów przygotowanych na czarodziejskie egzaminy. Twoim zadaniem jest uporządkować ją i nawarzyć 💥
- Stwórz listę
eliksiry
zawierającą tę listę (dodana ponizej) - Dodaj nowy eliksir
"Eliksir Księżycowego Blasku"
na koniec listy - Wstaw
"Eliksir Jedwabistego Snu"
na początek listy – to klasyk, który powinien być zawsze pierwszy! - Usuń
"Mugolskie Krople"
– Profesor uznała, że to profanacja sztuki warzenia - Wypisz w pętli wszystkie eliksiry z komentarzem
"✅ Gotowy"
przy każdym - Posortuj listę alfabetycznie i wypisz jeszcze raz – teraz wszystko wygląda jak gotowe do prezentacji!
Lista eliksirów:
"Eliksir Miłości",
"Wywar Stokrotkowy",
"Fortuna Potio",
"Napar Prawdy",
"Eliksir Niewidzialności",
"Super Mocny na Skupienie",
"Zapominalstwo wBbutelce",
"Mugolskie Krople",
"Anty-Sen o Smaku Kawy",
"Eliksir Sportowy"
🔮 Bonus: Dodaj f-string, np. print(f"{eliksir} ✅ Gotowy")
aby wyglądało ładniej