Z kursu: Zagadnienia programowania w Pythonie

Listy

- Listy i krotki to dwie struktury danych, których można użyć do przechowywania kolekcji obiektów w określonej kolejności. Listę można wizualizować jako rząd obiektów znajdujących się w linii. Każdy obiekt na liście jest indeksowany przez liczbę, a w świecie programowania numeracja zaczyna się od zera dla pierwszego elementu, jednego dla następnego elementu i tak dalej. Za pomocą tych indeksów można wstawiać, modyfikować i usuwać poszczególne elementy z listy. - Hej, wróciłeś ze sklepu. - Tak, a kiedy tam zaparkowałem samochód, miałem chwilę olśnienia. Wymyśliłem, jak mogę wyjaśnić listy. - Co mają ze sobą wspólnego listy i samochody? - Olivia, to naprawdę dobre pytanie. Pozwólcie, że opowiem wam pewną historię. Pod wieloma względami możesz myśleć o liście obiektów jak o rzędzie zaparkowanych samochodów. Samochody są w kolejności, zaczynając od pierwszego samochodu na końcu, który znajduje się pod numerem zero. Kiedy przyjechałem dziś do sklepu, postanowiłem dołączyć swój samochód do listy, parkując na końcu rzędu. Aby przypomnieć sobie, gdzie zaparkowałem, odliczyłem listę samochodów i ustaliłem, że mój samochód znajduje się na piątym miejscu, które było indeksem numer cztery. Przypomniałem sobie więc ten numer i poszedłem do sklepu. Kiedy byłem w sklepie na zakupach, inni klienci, którzy przyszli do sklepu, również zaparkowali swój samochód wewnątrz listy. Czasami, gdy przyjeżdżał nowy klient, wymieniali inny samochód z listy, ponieważ ktoś inny odchodził. Gdy nowy samochód zastępuje inny samochód o określonym indeksie, nie ma to wpływu na nikogo innego na liście. Lista to po prostu zamiana jednego samochodu na drugi. Podobnie niektórzy inni klienci, którzy przyjechali, byli uprzejmi i dołączyli swój samochód do listy, tak jak ja to zrobiłem, parkując na końcu rzędu. Kiedy ktoś to robi, jego samochód zajmuje kolejne miejsce na liście i nikt inny się tym nie przejmuje. - To ma sens. Ludzie po prostu przychodzą i odchodzą do swoich samochodów. -Dokładnie. Tak długo, jak nowe samochody albo zastępowały inne samochody na liście, albo przypinały się do końca listy, mój samochód pozostawał na indeksie numer cztery, ale problem pojawiał się, gdy ktoś się pojawiał i decydował, że musi zaparkować na początku listy. Kiedy ta osoba wstawiła swój samochód na pierwszą pozycję na liście pod indeksem zero, zmieniło to indeks wszystkich samochodów znajdujących się za tą pozycją, ponieważ przesunęło je wszystkie w dół listy. Oznacza to, że mój samochód nie znajdował się już na czwartym miejscu, w którym go zostawiłem. Kiedy wyszedłem ze sklepu i tam go szukałem, znalazłem czyjś samochód. - Jak więc znalazłeś swój samochód? - Cóż, mój samochód mógł znajdować się w dowolnym miejscu na liście, więc po prostu musiałem go szukać, aż go znalazłem. Rozpocząłem poszukiwania od początku listy, a następnie sprawdzałem każdy samochód po kolei, aż w końcu znalazłem swój samochód. Gdybym był zaparkowany na początku listy, byłoby to dość szybkie wyszukiwanie. Niestety, byłem zaparkowany bliżej końca listy, co oznacza, że musiałem przeszukać wiele samochodów, aż znalazłem swój, a to zajęło dużo czasu. Czułem się też trochę źle, kiedy wychodziłem, ponieważ usunąłem swój samochód z listy, a to oznaczało, że wszyscy zaparkowani za mną zostali przesunięci w górę i ponownie zmieniono ich indeks. - Cóż, cieszę się, że w końcu znalazłeś swój samochód. -Ja też. Nie należy oczekiwać, że obiekt pozostanie na tym samym miejscu na liście, jeśli wstawiasz i usuwasz inne obiekty, ponieważ może to spowodować przesunięcie rzeczy. - [Instruktor] W tej demonstracji będziemy po prostu wprowadzać polecenia bezpośrednio do tej interaktywnej powłoki Pythona, którą otworzyłem w przestrzeniach kodu. Jednym ze sposobów utworzenia listy w Pythonie jest ujęcie sekwencji obiektów w nawiasy kwadratowe z obiektami oddzielonymi przecinkami, jak pokazano tutaj. Ten wiersz kodu utworzy nowy obiekt listy o nazwie Row, który zawiera cztery ciągi reprezentujące samochody, które były zaparkowane przy sklepie, gdy przybył Baron. Naciskam enter, aby wysłać to polecenie do interpretera. Kiedy Baron przybył do sklepu wcześniej, zaparkował swój samochód na końcu listy. Możemy dołączyć element na końcu listy za pomocą metody append. Wykorzystajmy to, aby dołączyć jego mercedesa do rzędu samochodów. Teraz, jeśli wpiszę Row, powłoka Pythona wydrukuje zawartość tej listy i możemy zobaczyć, że Mercedes został dołączony na końcu. Samochód Barona znajduje się obecnie na piątej pozycji w zestawieniu, która odpowiada indeksowi numer cztery. Możemy uzyskać dostęp do elementu o tym indeksie na liście za pomocą nawiasów kwadratowych, takich jak ten. Jeśli chcemy zastąpić element na liście, możemy to zrobić, przypisując nowy obiekt do określonej lokalizacji indeksu za pomocą znaku równości. Podczas gdy Baron był w sklepie, część klientów opuściła sklep, a nowi klienci zajęli swoje miejsca parkingowe. Zamieńmy BMW, które zdobyło indeks drugi, na Jeepa. Jeśli ponownie spojrzymy na zawartość rzędu samochodów, zobaczymy, że Jeep zastąpił BMW, które kiedyś znajdowało się pod indeksem drugim. Wszystkie pozostałe samochody nadal znajdują się na swoich pierwotnych pozycjach na liście. Zgodnie z historią Barona, niektórzy z innych klientów, którzy się pojawili, zaparkowali na końcu rzędu, więc zaparkujmy inny samochód na końcu listy, korzystając z metody append. Tym razem zrobimy z tego Hondę. Sprawdzamy listę, aby zobaczyć, że jest na końcu i możemy sprawdzić, co jest w indeksie czwartym, aby zobaczyć, że Mercedes Barona nadal znajduje się tam, gdzie pierwotnie go zaparkował. Dołączanie obiektów na końcu listy nie ma wpływu na indeks innych obiektów, które już znajdują się na liście. Teraz, jeśli chcemy reprezentować osobę, która pojawiła się i zaparkowała swój samochód na początku listy, możemy to zrobić za pomocą metody wstawiania. Pierwszym argumentem metody insert jest indeks miejsca, w którym chcemy wstawić nowy obiekt. Ponieważ chcemy umieścić samochód na początku listy, ustawimy wartość indeksu na zero, a ja sprawię, że samochód będzie Kia. Jeśli ponownie sprawdzimy zawartość listy, zobaczymy, że Kia zajęła swoje miejsce na początku listy, a wszystkie inne samochody zostały przesunięte w dół. To znaczy, że jeśli szukam samochodu Barona w indeksie czwartym, w którym go zostawił, to nie jest ten Mercedes, w którym Baron przyjechał do sklepu. To Lexus zaparkowany w tym miejscu. Znam Barona i nie jest typem faceta, który kradnie lexusa z supermarketu. Powinniśmy dowiedzieć się, dokąd poszedł jego mercedes. Możemy przeszukać listę, aby znaleźć indeks określonego obiektu za pomocą metody index. Aby to zrobić, przekażmy ten samochód, który jest ciągiem znaków Mercedes do metody index. Metoda index przeszukuje listę, dopóki nie natknie się na obiekt Mercedes, a następnie zwraca indeks, w którym został znaleziony. W tym przypadku mercedes Barona był zaparkowany pod numerem piątym. Metoda indeksu rozpoczyna wyszukiwanie na początku listy i przesuwa się w dół wiersza, tak jak zrobił to Baron, gdy wcześniej szukał swojego samochodu w sklepie. Jeśli więc obiekt, którego szuka Python, znajduje się na początku listy, znajdzie go stosunkowo szybko, ale jeśli obiekt znajduje się na końcu naprawdę długiej listy, proces wyszukiwania może potrwać znacznie dłużej. Ponadto ważne jest, aby pamiętać, że metoda index zwraca tylko pierwsze dopasowanie, które znajdzie, ponieważ zatrzymuje się, gdy tylko znajdzie obiekt, którego szuka. Jeśli więc w tym rzędzie zaparkowanych byłoby kilka identycznych obiektów Mercedes, otrzymalibyśmy tylko indeks pierwszego, który znajdzie metoda index. Teraz, gdy wiemy, że samochód Barona znajduje się pod numerem pięć, możemy usunąć go z listy, korzystając z metody POP. Protokół POP usunie obiekt o określonym indeksie. Dajmy mu więc indeks pięciu i widzimy, że zwraca Mercedesa Barona, który znajdował się na piątym indeksie. Aby pokazać, że Mercedesa już nie ma, spójrzmy na zawartość listy. Teraz jest jeszcze jedna metoda listy, którą chcę ci pokazać, a jest to metoda usuwania. Zamiast używać indeksu do znalezienia indeksu samochodu Barona, a następnie użyć POP do usunięcia go z listy, mogliśmy po prostu użyć metody remove, która zasadniczo łączy te dwie czynności w jedną procedurę. Spróbujmy więc użyć metody usuwania, aby pozbyć się Lexusa. W przeciwieństwie do metody POP, gdy używamy remove, nie zwraca ona obiektu, który został usunięty z listy. Ma to sens, ponieważ powiedzieliśmy mu dokładnie, który obiekt chcemy usunąć, więc już wiemy, co zamierza usunąć. Teraz, jeśli po raz ostatni wyświetlę zawartość listy, zobaczymy, że Lexusa już tam nie ma.

Spis treści