Listy w Pythonie: Tworzenie, Operacje i Odwracanie Kolejności
- Szczegóły
Listy w programowaniu są niezwykle ważne i pozwalają na zorganizowanie, a przez to znaczne przyspieszenie obliczeń. Dzięki listom będziesz mógł efektywnie wykonywać 'masowe’ obliczenia, czyli za jednym zamachem będziesz w stanie przeprowadzić wiele obliczeń na raz. Działanie na listach w Pythonie otwiera ogromne możliwości obliczeniowe. W połączeniu z takimi obiektami Pythona jak pętle, funkcje i dedykowane biblioteki, jesteś w stanie zaprogramować niemal każdy problem.
Czym jest lista?
Lista jest jednym z wbudowanych typów danych w Pythonie i służy do przechowywania wielu elementów w jednej zmiennej. Język Python dostarcza szereg użytecznych funkcji, które pozwalają na efektywne wykonywanie operacji na danych zawartych w listach. Umiejętność korzystania z list jest niezbędna dla każdego programisty.
Tworzenie list w Pythonie
Aby utworzyć listę w Pythonie, używamy nawiasów kwadratowych ([]), tak jak w poniższym przykładzie:
lista_owocow = ["jablko", "banan", "gruszka"]
W powyższym przykładzie stworzyliśmy listę trzech elementów typu tekstowego (string). Możemy również tworzyć listę, której elementy nie są tego samego typu, na przykład:
Przeczytaj także: Biblioteki Pythona do Filtracji Sygnałów
lista1 = ["teskt1", 43, True, 40, "banan"]
W powyższym przykładzie lista zawiera elementy typu string, int oraz boolean.
Dostęp do elementów listy
Najprostszym sposobem uzyskania dostępu do elementu listy to użycie jego indeksu.
print(lista_owocow[2]) # gruszka
Tekst po “#” w powyższym przykładzie to komentarz programu, w którym pokazałem wynik działania danej instruckcji. Tym sposobem będę się posługiwał w kolejnych przykładach. Indeksować możemy również od końca. Element “-1” to element ostatni w liście, “-2” to przedostatni itd.
Przeczytaj także: Efektywne algorytmy odwrotności w Pythonie
Lista jest to zmienna zawierająca uporządkowany zbiór elementów. Podobnie jak napisy (strings) tworzy ciąg elementów. Listę tworzymy za pomocą nawiasów kwadratowych [], gdzie pomiędzy nimi wypisane są jej elementy rozdzielone przecinkami ,.
Podobnie jak przy napisach (strings) możemy się odwołać do wybranego elementu listy. Elementom listy przyporządkowane są konkretne numery indeksu. I tak: pierwszy element listy ma zawsze numer 0, drugi - 1 itd.
Listy są bardzo elastycznym narzędziem w Pythonie, które potrafią przechowywać wiele elementów różnych typów. Są podobne do tablic w C++, z tą różnicą, że można w nich przechowywać dane różnego typu. Część elementów może być liczbami, inna część ciągami znaków, a jeszcze inna np. listami.
Wyobraź sobie, że wrzucasz poszczególne elementy listy do szufladek. Pierwsza szufladka ma numer 0, druga ma numer 1, trzecia 2 itd., czyli podobnie jak w wielu innych językach programowania. Aby odwołać się do któregoś z elementów, musisz podać nazwę listy a następnie nawias kwadratowy, a w nim numer szufladki (indeks), do której chcesz się odwołać. Możesz odwoływać się do elementów listy poprzez kolejne ujemne numery szufladek.
W drugim wierszu kodu wykonaliśmy przypisanie y = x co spowodowało, że obiekty x i y wskazują na tą samą listę z danymi.
Przeczytaj także: Implementacja filtracji dolnoprzepustowej przy użyciu Pythona
Modyfikacja List
W poprzedniej lekcji, gdzie omawiałem napisy (strings) w Pythonie pokazałem kilka prostych metod, dzięki którym możemy modyfikować obiekty. Podobnie jest z listami.
A co jeśli chcemy zmienić jakiś element listy? Nic prostszego! Jak widzisz listy w Pythonie są bardzo elastyczne. Możesz je dowolnie modyfikować i co ważne - w odróżnieniu do wielu innych języków programowania - nie trzeba podawać w ogóle jaki rozmiar ma mieć lista.
Podobnie jak wyżej, przy okazji omawiania poprzedniej lekcji dotyczącej napisów wspomniałem o tzw. metodach wbudowanych (built-in methods). Dzięki takim 'zaszytym’ funkcjom możesz znacznie ułatwić sobie pracę również na listach.
Funkcje i Metody List
- Funkcja len() zwróciła, że moja_lista zawiera trzy elementy.
- Funkcja .append(x) dodała nowy element na koniec listy. Zawsze dodaje element na koniec listy.
- Za pomocą .insert(i,x) możesz wstawić nowy element x do listy w dowolnie wybranym miejscu - nowe miejsce w liście wskazujemy za pomocą indeksu i.
- Obie funkcje .pop() i .remove() służą właściwie do tego samego, ale podejście do przeszukiwania listy w celu usunięcia elementu jest różne.
Metoda zwraca indeks (numer szufladki) pierwszego wystąpienia elementu w liście.
Metoda usuwa element stojący na pozycji indeks, jednocześnie zwracając go.
print(lista_owocow) # ['jablko', 'banan', 'gruszka', 'wisnia']
Metoda insert()
Metoda append() działa tylko w przypadku dodawania elementów na końcu listy. W celu dodania elementów w żądanej pozycji używamy metody insert().
print(lista_owocow) # ['jablko', 'gruszka']
Jeśli lista zawiera więcej niż jeden pasujący element, to metoda remove() usuwa pierwszy z nich.
Metoda pop()
Metda pop() usuwa i zwraca domyślnie ostatni element listy.
Cięcie Listy
print(lista_owocow[0:2]) # ['jablko', 'banan']
W powyższym przykładzie odwołanie się do elementów “1:3” zwraca elemeny znajdujące się na pozycjach 1 i 2. Indeks stop (3) nie jest uwzględniany, co wynika ze sposobu, w jaki przechowywane są dane w pamięci komputera.
Cięcia listy możemy dokonać jeszcze na kilka sposobów:
- dostęp od początku do wybranego położenia: [:indeks]
- dostęp od wybranego położenia do końca listy: [indeks:]
- dostęp do co drugiego elementu listy: [::2]
Inne Operacje
Uwaga: To 'dodawanie’ za pomocą + nie zmieniło zawartości listy pierwotnej moja_lista. Mamy tu do czynienia tylko z łączeniem dwóch list.
Takie 'mnożenie’ nie zwróci nam nowej listy [3,6,9], tylko będzie to zwielokrotnienie listy.
Jeśli chcemy przeszukać listę (np. Jak widzisz funkcje max(), min() działają nie tylko na liczbach ale również i na innych typach zmiennych (w tym przykładzie są to napisy). Typów jednak nie można mieszać - Python wyrzuci błąd.
Funkcje .reverse() oraz .sort() modyfikują kolejność elementów listy. Za pomocą .reverse() możemy odwrócić kolejność danej listy. Z kolei jeśli chcesz uporządkować listę składającą się z napisów albo z liczb to możesz użyć funkcji .sort(). Jest to funkcja, która domyślnie układa elementy listy w porządku alfabetycznym lub liczby w kolejności rosnącej.
Sortowanie Listy
Metoda sort() domyślnie sortuje elementy listy w sposób rosnący.
print(lista_owocow) # ['jablko', 'gruszka', 'banan']
W kolejnym przykładzie posortujemy listę ze względu na długość elementów.
print(lista_owocow) # ['banan', 'jablko', 'gruszka']
Inne operacje na listach
Poniżej zestawiłem inne, przykładowe metody do operacji na listach:
- extend() - Dodaje wszystkie elementy listy do innej listy
- clear() - Usuwa wszystkie elementy z listy
- index() - Zwraca indeks pierwszego dopasowanego elementu
- count() - Zwraca liczbę elementów przekazanych jako argument
- copy() - Zwraca kopię listy
Wyrażenia Listowe (List Comprehension)
List comprehesion niestety nie posiada adekwatnego tłumaczenia na język polski. W niektórych artykułach możemy znaleźć termin “listy składane” lub “wyrażenia listowe”. Będę używał tego drugiego określenia, które lepiej odzwierciedla angielski termin. Wyrażenia listowe oferują krótką składnię, w sytuacjach gdy chcemy utworzyć nową listę na podstawie istniejącej listy. Rozważmy następujący przykład. Chcemy utworzyć listę owoców, wybierając z listy lista_owoców te owoce, które posiadają w nazwie literę “k”.
print(nowa_lista_owocow) # ['jablko', 'gruszka']
Aby zrozumieć powyższy przykład przyjrzyjmy się składni:
nowa_lista = [ wyrażenie(element) for element in stara_list if warunek]
List comprehension przechodzi przez wszystkie elementy listy i za każdym razem zwraca wynik wyrażenia jeśli spełniony jest określony warunek. W kontekście naszego przykładu mamy:
- wyrażenie: x
- warunek: “k” in x
Wynikiem wyrażenia “x” jest “x” czyli element starej listy.
Inną bardzo użyteczną funkcją Pythona są wyrażenia listowe (list comprehensions). Tutaj nie będę tego szerzej rozwijał z racji, że jest to bardziej zaawansowany temat. W skrócie mogę powiedzieć, że wyrażenia listowe pozwalają odwzorować pewną listę na inną wykonując na każdym elemencie tej listy pewną funkcję. Użyłem tutaj pętli for. Nie martw się jeśli nie wszystko rozumiesz - możesz śmiało przeskoczyć ten przykład.
Listy jako Macierze
Listy, w niektórych językach nazywane tablicami (np. Delphi/Pascal), wykorzystywane są często do 'masowych’ obliczeń. Przykładem może być metoda elementów skończonych (MES). Obliczenia w tej metodzie oparte są przede wszystkim na działaniach na macierzach (np. macierz sztywności, obciążeń etc.). Python pozwala na tworzenie dowolnych macierzy, które definiuje się przez tzw. zagnieżdżanie list, czyli lista w liście.
Dostaliśmy macierz 9-elementową o wymiarze 3×3. Jak widzisz definiowanie macierzy jest proste. Odwoływanie się do wybranego elementu macierzy jest identyczne jak w listach (w końcu macierz to lista w liście :)). Należy tylko pamiętać, że pierwszy indeks dotyczy numeru wiersza macierzy (czyli w poziomie), a drugi numeru elementu w tym wierszu.
Odwracanie Kolejności
Funkcje .reverse() oraz .sort() modyfikują kolejność elementów listy. Za pomocą .reverse() możemy odwrócić kolejność danej listy.
Przykłady odwracania kolejności
Potrzebuje napisać funkcję jak w temacie, najlepiej z użyciem stosu. Sam napisałem na razie funkcje odwracającą kolejność ale z całym zdaniu. Regex.Replace z MatchEvaluatorem który odwraca słowa. Wersja całkowicie ręczna: idziesz po kolei po tablicy znaków, jak napotkasz spację odwracasz połowę od ostatniej spacji do aktualnej spacji.
A potem to sobie wyświetl w pętli tak jak ci się podoba. Wersja całkowicie ręczna: idziesz po kolei po tablicy znaków, jak napotkasz spację odwracasz połowę od ostatniej spacji do aktualnej spacji.
tags: #python #reverse #odwrocona #kolejnosc #string #lista

