Listy

Lista jest strukturą danych, w której możemy w ciągu zapisać dane. Dzięki niej nie musimy definiować wielu zmiennych. Wystarczy, że na liście zapiszemy nasze dane:

d=[10, 8, 10, 12, 6, 8, 7, 12, 10, 16, 16, 9, 14, 9, 11, 17, 18, 9, 5, 17, 11, 17, 7, 7, 12, 9, 5, 18, 6, 7, 9, 9, 6, 8, 8, 11, 13, 16, 8, 8, 12, 5, 18, 15, 17, 18, 7, 8, 13, 5, 12, 11, 11, 12, 5, 17, 7, 15, 10, 14, 18, 5, 8, 9, 10, 14, 15, 13, 16, 14, 17, 16, 10, 7, 14, 15, 17, 11, 10, 18, 18, 9, 12, 18, 12, 13, 7, 10, 16, 12, 16, 8, 11, 15, 8, 7, 7, 10, 13, 13]

a następnie użyjemy tej samej funkcji co poprzednio, jako argument wprowadzając listę, czyli pisząc max(d). Dzięki temu jak interpreter python'a jest skonstruowany, takie użycie daje pożądany efekt.

A co jeśli interesuje nas konkretna, np. siedemnasta wartość z listy? Możemy wpisać to:

print d[16]

dzięki temu dostaniemy wartość siedemnastego elementu z listy. Proste? Nie? Coś nie gra? Już tłumaczę: w programowaniu najczęściej numeracja nie zaczyna się od 1 tylko od zera, stąd w nawiasach kwadratowych jest liczba 16 a nie 17. Przy okazji, te liczby oznaczające pozycję w liście będziemy nazywać ich indeksami. Teraz jasne? No to super, wiemy, że w zbiornikach od 10 do 15 są specjalne, bardzo drogie gatunki drożdży i chcieli byśmy zobaczyć jak wygląda ich tolerancja. Możemy jak poprzednio wpisać

print d[9]
print d[10]
print d[11]
print d[12]
print d[13]
print d[14]

ale to aż 6 linijek kodu który jest bardzo podobny. Skoro tak jest, to chyba spodziewasz się już, że i na to jest jakaś prostsza metoda. Owszem, oto ona: w nawiasach kwadratowych możemy wpisać zakres żeby wybrać fragment naszej długiej listy

print d[9:15]

I tu znów mamy pewną dziwną sytuację związaną z indeksami w liście. Już tłumaczę: pierwszą liczbą jest numer początkowego elementu, drugą liczbą jest numer do którego chcemy wybrać fragment listy (więc musi być o jeden większy niż ostatni numer cylindra który nas interesuje). Może to być mało intuicyjne ale tak już jest.

O naszych cylidnrach wiemy jeszcze jedną rzecz: są ustawione od najstarszego do najnowszego. Więc pewnie chcemy zobaczyć czy starsze hodowle radzą sobie lepiej niż nowe (powiedzmy do 5 hodowli). Możemy więc napisać tak jak poprzednio, ale możemy też zupełnie pominąć jedną z liczb zakresu, wtedy domyślnie brany jest początek lub koniec (w zależności od tego, którą liczbę pominiemy):

print d[:5]

Nie jest to może coś bardzo użytecznego samo z siebie ale warto o tym pamiętać (bo jak zwykle zaraz się przyda).

Logiczne wydało Ci się pewnie, że numeracja jest od lewej do prawej strony listy. Ale nic nie stoi na przeszkodzie, aby to odwrócić - robimy to za pomocą znaku minus

print d[-1]

ten kod weźmie ostatni element listy. Tu znów jest pewna niespójność, bo wpisujemy minus jeden... no cóż, nie istnieje coś takiego jak ujemne zero więc tak po prostu musi być.

Skoro już umiesz wybierać konkretne wartości z listy możesz też zaktualizować wyniki badań z cylindra 12, okazuje się że tolerancja spadła o 0.1. Oto jak można to zrobić:

d[11] = d[11] - 0.1

Zajmijmy się najpierw tym, co jest po znaku równości. Wybieramy 12 element z naszej listy i odejmujemy od niego 0.1. Następnie przypisujemy tą wartość w stare miejsce tak samo jak robiliśmy to ze zwykłymi zmiennymi. Wygodne, prawda?

Dostaliśmy przed chwilą od zaprzyjaźnionego laboratorium nowe drożdże, już są w cylindrze i mamy już pierwsze wyniki badań ich tolerancji. Ale co teraz? Trzeba by je jakoś dopisać do naszej listy. Robimy to za pomocą #metody append,  jako argument podając wartość jaką chcemy dopisać na końcu listy.

UWAGA metoda jest po prostu funkcją, tyle, że "należy" do obiektu (w tym wypadku do listy). Wywołując taką metodę "mówimy" liście, że ma dopisać sobie jeszcze jedną wartość.

d.append(14)
print d

Jak widać jest to dość proste, powyższa metoda zmodyfikowała naszą listę tak aby zawierała kolejny element.

Warto od razu przedstawić po krótce wszystkie dostępne metody (jednak te powyższe na codzień są zazwyczaj wystarczające):

  • Metoda extend służy do rozszerzenia naszej listy o jakąś inną listę.
  • Metoda insert służy do wstawienia wartości w dowolne miejsce na liście. Pierwszy argument to numer, który chcemy aby nasz wstawiany element (drugi argument) miał w kolejności w liście.
  • Metoda remove usuwa wartość z listy (jeśli wartość występuje więcej niż raz, usuwana jest ta, która na liście występuje jako pierwsza).
  • Metoda pop służy również do usuwania, ale jako argument przyjmuje numer elementu listy (zwany także najczęściej jako indeks) a dodatkowo zwraca nam wartość tego elementu. Uwaga, możemy nie podawać tej metodzie żadnego argumentu, wtedy domyślnie z listy jest wyrzucany ostatni element.
  • Metoda index służy do szukania wartości na liście, zwraca listę z numerami miejsc, na których występuje poszukiwana przez nas wartość.
  • Metoda sort służy do posortowania listy, może przyjmować argumenty, ale jak na razie zostawmy ją w jej najprostszej postaci.
  • Metoda reverse odwraca kolejność listy.

Dobra wiadomość jest taka, że znajmość tych metod jest w zupełności wystarczająca do pełnego wykorzystania możliwości list.

Oprócz metod, dla list dostępnych jest też wiele funkcji pomocniczych. Np. fajną funkcją, o której warto pamiętać jest range. Funkcja ta generuje listę o danej długości z kolejnymi liczbami całkowitymi od zera.

lista = range(15)
print lista