.. _przyklad4:
Listy i krotki
###############
.. note::
W tym przykładzie poznasz **listę** oraz **krotki**. Są to jedne z najczęściej używanych złożonych struktur danych,
które pozwalają przechowywać wiele danych pod jedną nazwą.
Zadanie
********
Napisz program :file:`lista.py`, który pobiera z klawiatury ``n`` liczb całkowitych i zapisuje je w liście.
Następnie wykonuje podane niżej operacje:
- wypisuje elementy listy i ich indeksy w jednym wierszu,
- wypisuje elementy listy w odwrotnej kolejności
- wypisuje elementy listy posortowane w porządku niemalejącym,
- wypisuje liczbę wystąpień oraz indeks pierwszego wystąpienia podanego elementu,
- usuwa z listy podany element,
- usuwa z listy element o podanym indeksie,
- wstawia podany element na podanym indeksie,
- wypisuje z listy elementy od indeksu ``i`` do ``j``.
**Dane**:
Wszystkie dane to liczby całkowite pobierane z klawiatury, niektóre dane zapisywane są w tych samych zmiennych.
sam.
- ``n`` – liczba liczb pobieranych z klawiatury i zapisywanych w liście,
- ``el`` – liczba, którą należy z listy usunąć,
- ``el`` – liczba, której liczbę wystąpień i indeks pierwszego wystąpienia należy wypisać,
- ``ind`` – indeks elementu do usunięcia,
- ``ind, el`` – indeks i element, który należy wstawić do tabeli,
- ``i, j`` – indeksy pobierane z klawiatury, oznaczające wycinek listy do wypisania.
.. tip::
Wszystkie poniższe przykłady operacji na listach warto wykonać w konsoli Pythona.
Treść komunikatów w funkcjach ``print()`` można skrócić.
Można również wpisywać kolejne polecenia do pliku i sukcesywnie go uruchomiać.
.. raw:: html
Plik lista.pyKod nr
.. literalinclude:: przyklad04.py
:linenos:
**Lista** to sekwencja indeksowanych danych, zazwyczaj tego samego typu, w kodzie łatwo ją rozpoznać
po nawiasach kwadratowych. Podstawowe operacje:
- ``lista = [3, 'III', 4, 'IV']`` – utworzenie listy poprzez podanie wartości,
- ``lista = []`` – utworzenie pustej listy,
- ``lista[0]`` – odczyt elementu o podanym indeksie, indeksy zaczynają się od 0 (zera),
- ``lista[1:4]`` – odczyt elementów od indeksu 1 do 3 przy użyciu notacji wycinkowej.
Funkcje działające na sekwencjach:
* ``len()`` – zwraca liczbę elementów;
* ``enumerate()`` – zwraca numer elementu i element sekwencji;
* ``sorted(lista)`` – zwraca kopię sekwencji posortowanej niemalejąco;
* ``sorted(lista, reverse=True)`` – zwraca kopię sekwencji w odwrotnym porządku;
* ``reversed()`` – zwraca kopię sekwencji w odwrotnym porządku.
.. note::
Sekwencjami są w Pythonie również ciągi znaków i krotki (tuple).
Metody obiektów typu lista:
* ``.append(x)`` – dodaje x do listy;
* ``.remove(x)`` – usuwa pierwszy x z listy;
* ``.insert(i, x)`` – wstawia x na indeksie i;
* ``.count(x)`` – zwraca liczbę wystąpień x;
* ``.index(x)`` – zwraca indeks pierwszego wystąpienia x;
* ``.pop()`` – usuwa i zwraca ostatni element listy;
* ``.pop(i)`` – usuwa i zwraca element wskazany przez i;
* ``.sort()`` – sortuje listę rosnąco;
* ``.reverse()`` – sortuje listę w odwróconym porządku.
**Krotka** (tupla) to niemodyfikowalna lista. Wykorzystywana jest do zapamiętywania
i przekazywania wartości, których nie powinno się zmieniać.
Krotki tworzymy podając wartości w nawiasach okrągłych, np. ``krotka = (1, 'a')``
lub z listy za pomocą funkcji: ``tuple(sekwencja)``. Krotka może powstać
również poprzez spakowanie wartości oddzielonych przecinkami,
np. ``krotka = 1, 'a'``. Próba zmiany wartości w krotce generuje błąd.
Przetestuj w konsoli Pythona:
.. code-block:: bash
>>> krotka = 2, 6
>>> a, b = krotka
>>> print(a, b)
>>> krotka[0] = 1
Ćwiczenia
-----------
Utwórz w konsoli Pythona dowolną listę i przećwicz notację wycinkową:
* sprawdź działanie indeksów pustych i ujemnych, np. ``lista[2:], lista[:4], lista[-2], lista[-2:]``,
* posortuj trwale dowolną listę malejąco,
* utwórz kopię listy posortowaną rosnąco.
.. admonition:: Pojęcia
:term:`lista`, :term:`metoda`, :term:`notacja wycinkowa`, :term:`krotka`