Preview Mode

You're viewing this material in preview mode. Sign up to track your progress and access all features.

Listy
Required In Progress

Python • kurs podstawowy • lekcja 18

Listy

Lista przechowuje elementy w kolejności i pozwala je zmieniać.

Twój cel: Zmienisz listę, odczytasz element i rozpoznasz współdzielenie tej samej listy.

Indeksy, pętla for i enumerate().

Od potrzeby do kodu

Indeksy zaczynają się od 0, tak jak w napisach. len(items) daje długość. Dla niepustej listy ostatni nieujemny indeks to len(items) - 1; dla pustej listy taki element nie istnieje.

items.append(value) dodaje na końcu. items.remove(value) usuwa pierwsze wystąpienie wartości, a nie element o podanym indeksie. Jeśli wartości nie ma, zgłosi ValueError. Przypisanie items[0] = value zastępuje pierwszy element. for item in items pobiera kolejne wartości.

Lista jest mutowalna. other = items nie tworzy drugiej listy: obie nazwy wskazują tę samą. Dlatego append jest widoczne przez obie nazwy. items.copy() tworzy nową listę z tymi samymi elementami; przy listach zagnieżdżonych nie kopiuje automatycznie ich wnętrza. append zmienia listę i zwraca None.

Przewidź przed uruchomieniem

items = ["chleb", "mleko"]
other = items
items.append("ser")
items.remove("mleko")
print(other)
print(items[1])
Porównaj wynik i prześledź mechanizm
Odróżniaj zmianę listy od przypisania nazwy. Indeks oznacza pozycję, remove otrzymuje wartość.
Odróżniaj zmianę listy od przypisania nazwy. Indeks oznacza pozycję, remove otrzymuje wartość.

['chleb', 'ser'] oraz ser. other i items wskazują tę samą listę, więc obie nazwy widzą zmiany. Po usunięciu mleka ser ma indeks 1.

Wynik kontrolny dla danych z przykładu. Wpisane odpowiedzi użytkownika nie są tutaj powtarzane:

['chleb', 'ser']
ser
Stan Indeks 0 Indeks 1 Indeks 2
Początek chleb mleko brak
Po append chleb mleko ser
Po remove chleb ser brak
Model do prześledzenia: porównaj każdy etap z kodem. Etykiety opisują znaczenie danych, nie tylko ich wygląd.

Zmień działający program

Zamiast other = items użyj items.copy(). Po dodaniu sera porównaj listę oryginalną z kopią.

Pierwsza wskazówka

Zachowaj działający punkt wyjścia. Zlokalizuj konstrukcję wskazaną w poleceniu i zmień tylko ten etap. Przed uruchomieniem zapisz oczekiwany efekt.

Porównaj swoją modyfikację
items = ["chleb", "mleko"]
other = items.copy()
items.append("ser")
print(items)
print(other)

Wynik kontrolny dla danych z przykładu. Wpisane odpowiedzi użytkownika nie są tutaj powtarzane:

['chleb', 'mleko', 'ser']
['chleb', 'mleko']

Znajdź przyczynę problemu

Celowo błędny przykład diagnostyczny. Najpierw postaw hipotezę. Nie kopiuj tej wersji jako poprawnego rozwiązania.

Zamierzone działanie: Dodaj ser, zachowując listę pod nazwą items.

items = ["chleb"]
items = items.append("ser")
print(items)
Trop do diagnozy

Porównaj zamierzony rezultat z typami, nazwami i kolejnością instrukcji. Wskaż pierwsze miejsce, w którym zachowanie odbiega od celu.

Zastosuj w nowej sytuacji

Wskazówka do rozpoczęcia

Odróżniaj zmianę listy od przypisania nazwy. Indeks oznacza pozycję, remove otrzymuje wartość.

Zacznij od przygotowania danych. Pierwsza instrukcja przykładowego rozwiązania:

tasks = ["czytać", "rysować"]
Rozwiązanie do samodzielnej kontroli
tasks = ["czytać", "rysować"]
tasks[0] = "liczyć"
tasks.append("spacer")
for number, task in enumerate(tasks, start=1):
    print(number, task)

Wynik kontrolny dla danych z przykładu. Wpisane odpowiedzi użytkownika nie są tutaj powtarzane:

1 liczyć
2 rysować
3 spacer

Porównaj dane wejściowe, wynik i powód użycia konstrukcji. Inna wersja kodu jest poprawna, jeśli realizuje te same wymagania.

Co zabierasz do kolejnego programu?

Odróżniaj zmianę listy od przypisania nazwy. Indeks oznacza pozycję, remove otrzymuje wartość.

Bez zaglądania do przykładu wyjaśnij własnymi słowami, jak główna konstrukcja prowadzi od danych do wyniku. Potem sprawdź wyjaśnienie, uruchamiając swój program.