Nawigacja po kolekcjach
Oto przykład:
# Star Wars!
star_wars = ["Luke", "Leia", "Han", "Vader", "Obi-Wan",
"Chewie", "R2D2", "C3PO", "Emperor", "Jabba",
"Lando"]
Zmienna star_wars przechowuje listę elementów, które są napisami. Podczas tej lekcji poznamy możliwości operowania na listach, które daje nam Python.
Ujemne indeksy
Co się stanie, jeśli podamy ujemny indeks?
Oto przykład:
# ujemny indeks
print(star_wars[-1])
Oto przykład ujemnego indeksu:
Program wyświetli napis “Lando”.
Indeks -1 oznacza po prostu “weź pierwszy element od końca”. Analogicznie – indeks -2 zwróci nam Jabbę, -3 – Imperatora, -4 C3PO i tak dalej, aż do końca. Indeks -100 wyrzuci błąd, bo lista nie posiada aż tylu elementów.
Fragment listy
Możemy pobrać fragment listy podając dwa indeksy: początkowy i końcowy. Oddzielamy je dwukropkiem.
Oto przykład:
# fragment listy
fragment = star_wars[2:5]
print(fragment)
Oto przykład fragmentu listy:
Wynikiem będzie:
['Han', 'Vader', 'Obi-Wan']
Coś tu jest nie tak, prawda? Skoro w nawiasie podajemy indeks początkowy i końcowy, to powinno pokazać bohaterów od Hana do Chewiego włącznie!
Otóż nie. W Pythonie indeks końcowy to ten, który już nie wchodzi do zakresu. Mówiąc prościej – dodaj 1 do indeksu ostatniego elementu, który chcesz wyciągnąć. Zatem star_wars[2:5] wyciągnie Ci drugi, trzeci i czwarty element z listy star_wars, ale piątego już nie!
Puste indeksy
Oto przykład pominięcia indeksu listy:
ch1 = star_wars[4:]
ch2 = star_wars[:6]
print(ch1)
print(ch2)
Jeśli pominiesz indeks listy to:
- w zmiennej ch1 będą się znajdowały elementy listy star_wars od elementu o indeksie 4 do końca,
- w zmiennej ch2 będą się znajdowały elementy listy star_wars od elementu o indeksie 0, do elementu o indeksie 5 (pamiętaj, że prawy indeks nie wchodzi do zakresu)
W zakresach możesz używać też indeksów ujemnych.
Oto przykład używania indeksów ujemnych:
ch3 = star_wars[-4:]
print(ch3)
Wynik:
['C3PO', 'Emperor', 'Jabba', 'Lando']
Czyli od elementu czwartego od końca do ostatniego elementu.
ch4 = star_wars[1:-5]
print(ch4)
Oto przykład kolejny przykład użycia ujemnych indeksów:
Wynik:
['Leia', 'Han', 'Vader', 'Obi-Wan', 'Chewie']
Zwróć uwagę, że piątym elementem od końca jest R2D2, ale ten element nie wchodzi do zakresu.
Skoki
Python jest tak fajnie zaprojektowany, że umożliwia nawet wyjęcie z listy nie tylko kilku kolejnych elementów, ale np. co drugi, co trzeci, a nawet od tyłu! Wystarczy tylko dodać kolejny parametr w nawiasie kwadratowym, również oddzielając go dwukropkiem.
Oto przykład:
# bierzemy co drugi element, począwszy od pierwszego, do szóstego włącznie.
ch5 = star_wars[1:7:2]
print(ch5)
# ...a tutaj bierzemy od początku do końca co trzeci:
ch6 = star_wars[::3]
print(ch6)
# Teraz weźmiemy od drugiego od końca do drugiego od początku,
# co drugi:
ch7 = star_wars[-2:2:-2]
print(ch7)
# ...a teraz najlepsze: odwracamy kolejność listy:
ch8 = star_wars[::-1]
print(ch8)
Oto przykład użycia skoków:
Genialne, prawda?
Ale to jeszcze nie wszystko!
Cofnijcie się do początku poprzedniej lekcji, nazwałem tam listę kolekcją. Kolekcją w informatyce nazywamy obiekt, który potrafi przechować dowolną liczbę innych obiektów. Zatem, w Pythonie, lista jest kolekcją. Ale nie tylko.
Napisy
Napisy? Tak! W Pythonie napis też jest kolekcją pojedynczych znaków! I tak, jak możemy nawigować po liście, wycinać małe fragmenty, odwracać – tak samo możemy postępować z napisami.
Oto przykład:
# weźmy pierwszy znak z napisu
txt = “A long time ago in a galaxy far, far away…”
print(txt[0])
Wynik:
A
...a teraz wytniemy drugi wyraz:
word = txt[2:6]
print(word)
Wynik:
long
A teraz odwracamy napis:
print(txt[::-1])
Wynik:
...yawa raf ,raf yxalag a ni oga emit gnol A
Oto przykład operacji na tekście:
Zadania
Zadanie 1
Przeanalizuj kod. Znajdziesz w nim listę wszystkich płyt zespołu The Beatles, posortowanych od najstarszej (indeks 0), do najnowszej. Wyświetl pierwszą i ostatnią płytę zespołu.
Przejdź do pierwszego zadania:
Zadanie 3
Wyświetl na ekranie wszystkie płyty od trzeciej do siódmej włącznie
Przejdź do trzeciego zadania:
Zadanie 4
A teraz – wyświetl co drugą płytę, począwszy od pierwszej, skończywszy na ostatniej.
Przejdź do czwartego zadania:
Zadanie 5
Na koniec wyświetl wszystkie płyty od najstarszej, do najnowszej (użyj odwracania tablicy).
Przejdź do piątego zadania: