Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Tablica jednowymiarowa – przypomnienie

Tablica jednowymiarowa jest uporządkowanym zbiorem elementów tego samego typu. Są one numerowane (indeksowane). Pierwszy element ma numer 0.

Tablica jednowymiarowa w języku Python

W języku Python struktura danych (tablica jednowymiarowa) implementowana jest najczęściej za pomocą listy.

Oto deklaracja i zarazem definicja pustej tablicy jednowymiarowej w języku Python:

Linia 1. przykladowa podkreślnik tablica znak równości otwórz nawias kwadratowy zamknij nawias kwadratowy.

Definiowanie tablicy zaczynamy od nadania nazwy. Nie musimy określać, jakiego typu dane będzie przechowywać.

Do nazwy przykladowa_tablica będziemy się odwoływać, aby odczytać zawartość tablicy, wpisać konkretną liczbę w określonym miejscu albo w celu wykonania operacji na wybranym elemencie.

Nie musimy w tym miejscu deklarować rozmiaru tablicy.

Dla zainteresowanych

W języku Python istnieje również typ tuple (krotka), który jest bardzo podobny do listy, jednak jego modyfikacja nie jest możliwa. Kolejną różnicą pomiędzy nimi jest to, że zmienna typu tuple zajmuje mniej pamięci niż list.

Operacje na listach

1
Przykład 1

Listy w języku Pythonmodyfikowalnezmienna (modyfikowalna, zmienialna)modyfikowalne. Oto wybrane metody, które możemy zastosować dla obiektu L (typu list):

Nazwa metody

Parametr

Zwracana wartość

Opis metody – uwagi

L.append(x)

x – dowolny typ

-

dopisuje do listy (na jej końcu) przekazany obiekt x

L.copy()

-

list

tworzy nowy obiekt i zwraca duplikat listy

L.clear()

-

-

usuwa zawartość całej listy
(kasuje wszystkie jej elementy)

L.count(x)

x – dowolny typ

int

zwraca liczbę wystąpień obiektu x na liście

L.extend(L2)

L2 - Iterableobiekt iterowanyIterable

-

rozszerza (dodaje) do listy elementy obiektu iterowanegoobiekt iterowanyobiektu iterowanego L2

L.index(x, start, stop)

x – dowolny typ,
start,stop - opcjonalne; określają przedział dla przeszukiwania

int

zwraca index pierwszego elementu w liście o wartości x 
(lub zgłasza wyjątekwyjątekwyjątek ValueError, jeśli taki obiekt nie występuje)

Przykład 2

Dana jest tablica jednowymiarowa liczby. Jest to pusta tablica.

Linia 1. liczby znak równości otwórz nawias kwadratowy zamknij nawias kwadratowy.

Wypełnimy ją danymi, wykorzystując pętlę for. Wypełnimy ją kolejnymi liczbami naturalnymi z zakresu <a, b).

Zmienna liczba przechowuje kolejne wartości z zakresu <a, b).

Linia 1. liczby znak równości otwórz nawias kwadratowy zamknij nawias kwadratowy. Linia 2. a znak równości 1. Linia 3. b znak równości 10. Linia 5. for liczba in range otwórz nawias okrągły a przecinek b zamknij nawias okrągły dwukropek. Linia 6. liczby kropka append otwórz nawias okrągły liczba zamknij nawias okrągły. Linia 8. print otwórz nawias okrągły liczby zamknij nawias okrągły.
Przykład 3

W języku Python tablice implementowane są za pomocą listy. Listy od tablic różnią się tym, że mogą zawierać różne typy danych. Zatem poniższa struktura jest listą, ale nie jest tablicą:

Linia 1. lista podkreślnik danych znak równości otwórz nawias kwadratowy 27 przecinek cudzysłów Grzegorz cudzysłów przecinek True przecinek cudzysłów maj cudzysłów przecinek 0 kropka 05 zamknij nawias kwadratowy.

Natomiast poniższa struktura jest tablicą zaimplementowaną za pomocą listy:

Linia 1. tablica podkreślnik danych znak równości otwórz nawias kwadratowy cudzysłów Michał cudzysłów przecinek cudzysłów Grzegorz cudzysłów przecinek cudzysłów Karol cudzysłów przecinek cudzysłów Piotr cudzysłów przecinek cudzysłów Paweł cudzysłów zamknij nawias kwadratowy.

Zmienna tablica_danych składa się z pięciu elementów – do każdego z nich możemy się odwołać, podając indeks, czyli numer określający pozycję elementu.

Przygotujmy kod, który pozwoli wypisać elementy tablicy (element), ich indeks (ind) oraz typ (type()).

Wbudowana funkcja enumerate pozwala przeiterować po tablicy i pobrać zarówno wartość indeksu, jak i elementu znajdującego się pod danym indeksem.

Do wyświetlenia danych użyjemy mechanizmu formatowania f‑stringf‑stringf‑string:

Linia 1. for ind przecinek element in enumerate otwórz nawias okrągły tablica podkreślnik danych zamknij nawias okrągły dwukropek. Linia 2. print otwórz nawias okrągły f cudzysłów Element o indeksie otwórz nawias klamrowy ind zamknij nawias klamrowy ma wartość otwórz nawias klamrowy element zamknij nawias klamrowy cudzysłów zamknij nawias okrągły. Linia 3. print otwórz nawias okrągły f cudzysłów Jego typ to otwórz nawias klamrowy type otwórz nawias okrągły element zamknij nawias okrągły zamknij nawias klamrowy cudzysłów zamknij nawias okrągły.

Efekt działania programu:

Linia 1. Element o indeksie 0 ma wartość Michał. Linia 2. Jego typ to otwórz nawias ostrokątny class apostrof str apostrof zamknij nawias ostrokątny. Linia 3. Element o indeksie 1 ma wartość Grzegorz. Linia 4. Jego typ to otwórz nawias ostrokątny class apostrof str apostrof zamknij nawias ostrokątny. Linia 5. Element o indeksie 2 ma wartość Karol. Linia 6. Jego typ to otwórz nawias ostrokątny class apostrof str apostrof zamknij nawias ostrokątny. Linia 7. Element o indeksie 3 ma wartość Piotr. Linia 8. Jego typ to otwórz nawias ostrokątny class apostrof str apostrof zamknij nawias ostrokątny. Linia 9. Element o indeksie 4 ma wartość Paweł. Linia 10. Jego typ to otwórz nawias ostrokątny class apostrof str apostrof zamknij nawias ostrokątny.
Ważne!
  • Pozycja obiektu w ciągu elementów pozostaje niezmienna, nie możemy przypisać elementowi tablicy innego indeksu.

  • Każdy element tablicy musi być tego samego typu.

  • W języku Python indeksowanie elementów tablicy rozpoczyna się od liczby 0, zatem zapis tablica_danych[3] wskazuje czwarty element.

  • Oprócz tablic implementowanych za pomocą list język Python oferuje także krotkikrotka, tuplakrotki (typ tuple), które zachowują się podobnie do list (z pewnymi ograniczeniami).

Wykorzystajmy poznane metody w prostym programie.

Stworzymy najpierw pustą listę, którą wypełnimy naprzemiennie liczbami całkowitymi od 0 do 6 i ich odpowiednikami typu str. W celu wypełnienia listy danymi, wykorzystamy instrukcję for.

Elementy do listy dodajemy za pomocą metody append(). Dodaje ona element na końcu listy.

Linia 1. lista znak równości otwórz nawias kwadratowy zamknij nawias kwadratowy. Linia 2. for kolejny in range otwórz nawias okrągły 7 zamknij nawias okrągły dwukropek. Linia 3. lista kropka append otwórz nawias okrągły kolejny zamknij nawias okrągły. Linia 4. print otwórz nawias okrągły lista zamknij nawias okrągły. Linia 5. lista kropka append otwórz nawias okrągły str otwórz nawias okrągły kolejny zamknij nawias okrągły zamknij nawias okrągły. Linia 6. print otwórz nawias okrągły lista zamknij nawias okrągły.

Efektem działania programu jest wyświetlenie zawartości listy składającej się z elementów typu int oraz typu str (w języku Python lista może zawierać elementy różnych typów):

Linia 1. otwórz nawias kwadratowy 0 zamknij nawias kwadratowy. Linia 2. otwórz nawias kwadratowy 0 przecinek apostrof 0 apostrof zamknij nawias kwadratowy. Linia 3. otwórz nawias kwadratowy 0 przecinek apostrof 0 apostrof przecinek 1 zamknij nawias kwadratowy. Linia 4. otwórz nawias kwadratowy 0 przecinek apostrof 0 apostrof przecinek 1 przecinek apostrof 1 apostrof zamknij nawias kwadratowy. Linia 5. otwórz nawias kwadratowy 0 przecinek apostrof 0 apostrof przecinek 1 przecinek apostrof 1 apostrof przecinek 2 zamknij nawias kwadratowy. Linia 6. otwórz nawias kwadratowy 0 przecinek apostrof 0 apostrof przecinek 1 przecinek apostrof 1 apostrof przecinek 2 przecinek apostrof 2 apostrof zamknij nawias kwadratowy. Linia 7. otwórz nawias kwadratowy 0 przecinek apostrof 0 apostrof przecinek 1 przecinek apostrof 1 apostrof przecinek 2 przecinek apostrof 2 apostrof przecinek 3 zamknij nawias kwadratowy. Linia 8. otwórz nawias kwadratowy 0 przecinek apostrof 0 apostrof przecinek 1 przecinek apostrof 1 apostrof przecinek 2 przecinek apostrof 2 apostrof przecinek 3 przecinek apostrof 3 apostrof zamknij nawias kwadratowy. Linia 9. otwórz nawias kwadratowy 0 przecinek apostrof 0 apostrof przecinek 1 przecinek apostrof 1 apostrof przecinek 2 przecinek apostrof 2 apostrof przecinek 3 przecinek apostrof 3 apostrof przecinek 4 zamknij nawias kwadratowy. Linia 10. otwórz nawias kwadratowy 0 przecinek apostrof 0 apostrof przecinek 1 przecinek apostrof 1 apostrof przecinek 2 przecinek apostrof 2 apostrof przecinek 3 przecinek apostrof 3 apostrof przecinek 4 przecinek apostrof 4 apostrof zamknij nawias kwadratowy. Linia 11. otwórz nawias kwadratowy 0 przecinek apostrof 0 apostrof przecinek 1 przecinek apostrof 1 apostrof przecinek 2 przecinek apostrof 2 apostrof przecinek 3 przecinek apostrof 3 apostrof przecinek 4 przecinek apostrof 4 apostrof przecinek 5 zamknij nawias kwadratowy. Linia 12. otwórz nawias kwadratowy 0 przecinek apostrof 0 apostrof przecinek 1 przecinek apostrof 1 apostrof przecinek 2 przecinek apostrof 2 apostrof przecinek 3 przecinek apostrof 3 apostrof przecinek 4 przecinek apostrof 4 apostrof przecinek 5 przecinek apostrof 5 apostrof zamknij nawias kwadratowy. Linia 13. otwórz nawias kwadratowy 0 przecinek apostrof 0 apostrof przecinek 1 przecinek apostrof 1 apostrof przecinek 2 przecinek apostrof 2 apostrof przecinek 3 przecinek apostrof 3 apostrof przecinek 4 przecinek apostrof 4 apostrof przecinek 5 przecinek apostrof 5 apostrof przecinek 6 zamknij nawias kwadratowy. Linia 14. otwórz nawias kwadratowy 0 przecinek apostrof 0 apostrof przecinek 1 przecinek apostrof 1 apostrof przecinek 2 przecinek apostrof 2 apostrof przecinek 3 przecinek apostrof 3 apostrof przecinek 4 przecinek apostrof 4 apostrof przecinek 5 przecinek apostrof 5 apostrof przecinek 6 przecinek apostrof 6 apostrof zamknij nawias kwadratowy.

Wykonamy teraz kilka operacji na poszczególnych elementach:

Linia 1. for kolejny in range otwórz nawias okrągły 14 zamknij nawias okrągły dwukropek. Linia 2. if kolejny procent 2 znak równości znak równości 0 dwukropek. Linia 3. lista otwórz nawias kwadratowy kolejny zamknij nawias kwadratowy znak równości lista otwórz nawias kwadratowy kolejny zamknij nawias kwadratowy asterysk 3. Linia 4. if kolejny procent 2 znak równości znak równości 1 dwukropek. Linia 5. lista otwórz nawias kwadratowy kolejny zamknij nawias kwadratowy znak równości lista otwórz nawias kwadratowy kolejny zamknij nawias kwadratowy asterysk 2. Linia 6. print otwórz nawias okrągły lista zamknij nawias okrągły.

W rezultacie otrzymamy zmodyfikowaną listę:

Linia 1. otwórz nawias kwadratowy 0 przecinek apostrof 0 apostrof przecinek 1 przecinek apostrof 1 apostrof przecinek 2 przecinek apostrof 2 apostrof przecinek 3 przecinek apostrof 3 apostrof przecinek 4 przecinek apostrof 4 apostrof przecinek 5 przecinek apostrof 5 apostrof przecinek 6 przecinek apostrof 6 apostrof zamknij nawias kwadratowy. Linia 2. otwórz nawias kwadratowy 0 przecinek apostrof 00 apostrof przecinek 1 przecinek apostrof 1 apostrof przecinek 2 przecinek apostrof 2 apostrof przecinek 3 przecinek apostrof 3 apostrof przecinek 4 przecinek apostrof 4 apostrof przecinek 5 przecinek apostrof 5 apostrof przecinek 6 przecinek apostrof 6 apostrof zamknij nawias kwadratowy. Linia 3. otwórz nawias kwadratowy 0 przecinek apostrof 00 apostrof przecinek 3 przecinek apostrof 1 apostrof przecinek 2 przecinek apostrof 2 apostrof przecinek 3 przecinek apostrof 3 apostrof przecinek 4 przecinek apostrof 4 apostrof przecinek 5 przecinek apostrof 5 apostrof przecinek 6 przecinek apostrof 6 apostrof zamknij nawias kwadratowy. Linia 4. otwórz nawias kwadratowy 0 przecinek apostrof 00 apostrof przecinek 3 przecinek apostrof 11 apostrof przecinek 2 przecinek apostrof 2 apostrof przecinek 3 przecinek apostrof 3 apostrof przecinek 4 przecinek apostrof 4 apostrof przecinek 5 przecinek apostrof 5 apostrof przecinek 6 przecinek apostrof 6 apostrof zamknij nawias kwadratowy. Linia 5. otwórz nawias kwadratowy 0 przecinek apostrof 00 apostrof przecinek 3 przecinek apostrof 11 apostrof przecinek 6 przecinek apostrof 2 apostrof przecinek 3 przecinek apostrof 3 apostrof przecinek 4 przecinek apostrof 4 apostrof przecinek 5 przecinek apostrof 5 apostrof przecinek 6 przecinek apostrof 6 apostrof zamknij nawias kwadratowy. Linia 6. otwórz nawias kwadratowy 0 przecinek apostrof 00 apostrof przecinek 3 przecinek apostrof 11 apostrof przecinek 6 przecinek apostrof 22 apostrof przecinek 3 przecinek apostrof 3 apostrof przecinek 4 przecinek apostrof 4 apostrof przecinek 5 przecinek apostrof 5 apostrof przecinek 6 przecinek apostrof 6 apostrof zamknij nawias kwadratowy. Linia 7. otwórz nawias kwadratowy 0 przecinek apostrof 00 apostrof przecinek 3 przecinek apostrof 11 apostrof przecinek 6 przecinek apostrof 22 apostrof przecinek 9 przecinek apostrof 3 apostrof przecinek 4 przecinek apostrof 4 apostrof przecinek 5 przecinek apostrof 5 apostrof przecinek 6 przecinek apostrof 6 apostrof zamknij nawias kwadratowy. Linia 8. otwórz nawias kwadratowy 0 przecinek apostrof 00 apostrof przecinek 3 przecinek apostrof 11 apostrof przecinek 6 przecinek apostrof 22 apostrof przecinek 9 przecinek apostrof 33 apostrof przecinek 4 przecinek apostrof 4 apostrof przecinek 5 przecinek apostrof 5 apostrof przecinek 6 przecinek apostrof 6 apostrof zamknij nawias kwadratowy. Linia 9. otwórz nawias kwadratowy 0 przecinek apostrof 00 apostrof przecinek 3 przecinek apostrof 11 apostrof przecinek 6 przecinek apostrof 22 apostrof przecinek 9 przecinek apostrof 33 apostrof przecinek 12 przecinek apostrof 4 apostrof przecinek 5 przecinek apostrof 5 apostrof przecinek 6 przecinek apostrof 6 apostrof zamknij nawias kwadratowy. Linia 10. otwórz nawias kwadratowy 0 przecinek apostrof 00 apostrof przecinek 3 przecinek apostrof 11 apostrof przecinek 6 przecinek apostrof 22 apostrof przecinek 9 przecinek apostrof 33 apostrof przecinek 12 przecinek apostrof 44 apostrof przecinek 5 przecinek apostrof 5 apostrof przecinek 6 przecinek apostrof 6 apostrof zamknij nawias kwadratowy. Linia 11. otwórz nawias kwadratowy 0 przecinek apostrof 00 apostrof przecinek 3 przecinek apostrof 11 apostrof przecinek 6 przecinek apostrof 22 apostrof przecinek 9 przecinek apostrof 33 apostrof przecinek 12 przecinek apostrof 44 apostrof przecinek 15 przecinek apostrof 5 apostrof przecinek 6 przecinek apostrof 6 apostrof zamknij nawias kwadratowy. Linia 12. otwórz nawias kwadratowy 0 przecinek apostrof 00 apostrof przecinek 3 przecinek apostrof 11 apostrof przecinek 6 przecinek apostrof 22 apostrof przecinek 9 przecinek apostrof 33 apostrof przecinek 12 przecinek apostrof 44 apostrof przecinek 15 przecinek apostrof 55 apostrof przecinek 6 przecinek apostrof 6 apostrof zamknij nawias kwadratowy. Linia 13. otwórz nawias kwadratowy 0 przecinek apostrof 00 apostrof przecinek 3 przecinek apostrof 11 apostrof przecinek 6 przecinek apostrof 22 apostrof przecinek 9 przecinek apostrof 33 apostrof przecinek 12 przecinek apostrof 44 apostrof przecinek 15 przecinek apostrof 55 apostrof przecinek 18 przecinek apostrof 6 apostrof zamknij nawias kwadratowy. Linia 14. otwórz nawias kwadratowy 0 przecinek apostrof 00 apostrof przecinek 3 przecinek apostrof 11 apostrof przecinek 6 przecinek apostrof 22 apostrof przecinek 9 przecinek apostrof 33 apostrof przecinek 12 przecinek apostrof 44 apostrof przecinek 15 przecinek apostrof 55 apostrof przecinek 18 przecinek apostrof 66 apostrof zamknij nawias kwadratowy.

Pamiętajmy, że w języku Python działanie n * ciag_znakow, gdzie n jest typu intciag_znakow jest typu str, zwróci ciag_znakow powtórzony n razy.

Ważne!

Do elementów list w języku Python można się również odwoływać za pomocą ujemnych indeksów. Za pomocą lista[-i] odwołujemy się do i‑tego elementu, licząc od końca listy. Przykładowo, wywołując lista[-1], otrzymamy ostatni element, natomiast w przypadku lista[-3] – trzeci element od końca.

Zmiana elementów listy

Ponieważ listy w języku Python są modyfikowalne, możemy dowolne typy danych dodawać do listy lub wpisywać w miejsce istniejących elementów. Oto kilka przykładów takich operacji:

Linia 1. lista znak równości otwórz nawias kwadratowy zamknij nawias kwadratowy kratka pusta lista. Linia 2. lista kropka append otwórz nawias okrągły 22 zamknij nawias okrągły. Linia 3. print otwórz nawias okrągły lista zamknij nawias okrągły. Linia 4. kratka otwórz nawias kwadratowy 22 zamknij nawias kwadratowy. Linia 6. lista kropka extend otwórz nawias okrągły otwórz nawias kwadratowy 3 przecinek 55 przecinek 32 przecinek 2 kropka 6 przecinek apostrof Python apostrof zamknij nawias kwadratowy zamknij nawias okrągły. Linia 7. print otwórz nawias okrągły lista zamknij nawias okrągły. Linia 8. kratka otwórz nawias kwadratowy 22 przecinek 3 przecinek 55 przecinek 32 przecinek 2 kropka 6 przecinek apostrof Python apostrof zamknij nawias kwadratowy. Linia 10. print otwórz nawias okrągły lista otwórz nawias kwadratowy 3 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 11. kratka 32. Linia 13. lista otwórz nawias kwadratowy 3 zamknij nawias kwadratowy znak równości apostrof Linux apostrof. Linia 14. print otwórz nawias okrągły lista zamknij nawias okrągły. Linia 15. kratka otwórz nawias kwadratowy 22 przecinek 3 przecinek 55 przecinek apostrof Linux apostrof przecinek 2 kropka 6 przecinek apostrof Python apostrof zamknij nawias kwadratowy. Linia 17. lista kropka extend otwórz nawias okrągły apostrof Linux apostrof zamknij nawias okrągły. Linia 18. print otwórz nawias okrągły lista zamknij nawias okrągły. Linia 19. kratka otwórz nawias kwadratowy 22 przecinek 3 przecinek 55 przecinek apostrof Linux apostrof przecinek 2 kropka 6 przecinek apostrof Python apostrof przecinek apostrof L apostrof przecinek apostrof i apostrof przecinek apostrof n apostrof przecinek apostrof u apostrof przecinek apostrof x apostrof zamknij nawias kwadratowy.

W obiektach typu list można odwołać się do ich poszczególnych elementów, używając wyrażenia indeksującegowyrażenie indeksującewyrażenia indeksującego. Obowiązuje następująca składnia:

wycinek = lista[początek : koniec : krok]

gdzie:

  • początek – indeks elementu, od którego będzie się zaczynał podciąg; domyślnie początek = 0,

  • koniec – indeks elementu, przed którym skończy się podciąg; wycinek z listy zawiera elementy listy o indeksach z przedziału <początek, koniec); domyślnie koniec = len(lista),

  • krok – pozwala określić, co który element podciągu będzie się zawierał w wycinku; domyślnie krok = 1.

Wszystkie parametry muszą być liczbami całkowitymi. Indeksy można pomijać, wtedy zostaną zastosowane domyślne wartości. Oto przykłady poprawnych wycinków:

  • lista[:3] – trzy pierwsze elementy listy,

  • lista[3:] – elementy listy z pominięciem pierwszych trzech elementów,

  • lista[3:5] – elementy listy o indeksach od 3 do 4,

  • lista[4:2:-1] – elementy listy o indeksach od 3 do 4, ale w odwrotnej kolejności (najpierw element lista[4], następnie lista[3]).

Ważne!

Zauważ, że jeżeli krok jest liczbą ujemną, to elementy w wycinku zostaną zapisane w odwrotnej kolejności. Szczególnie instrukcja lista[::-1] pozwala nam odwrócić listę.

Oto klika przykładowych wywołań z użyciem tej konstrukcji:

Linia 1. lista znak równości otwórz nawias kwadratowy 6 przecinek 6 przecinek 12 przecinek 19 przecinek 19 przecinek 5 przecinek 15 przecinek 2 przecinek 9 przecinek 19 przecinek 7 przecinek 18 przecinek 10 przecinek 16 przecinek 19 zamknij nawias kwadratowy. Linia 2. print otwórz nawias okrągły lista otwórz nawias kwadratowy 3 dwukropek 6 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 3. kratka otwórz nawias kwadratowy 19 przecinek 19 przecinek 5 zamknij nawias kwadratowy. Linia 5. print otwórz nawias okrągły lista otwórz nawias kwadratowy 10 dwukropek 6 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 6. kratka otwórz nawias kwadratowy zamknij nawias kwadratowy. Linia 8. print otwórz nawias okrągły lista otwórz nawias kwadratowy 10 dwukropek 6 dwukropek minus 1 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 9. kratka otwórz nawias kwadratowy 7 przecinek 19 przecinek 9 przecinek 2 zamknij nawias kwadratowy. Linia 11. print otwórz nawias okrągły lista otwórz nawias kwadratowy dwukropek zamknij nawias kwadratowy zamknij nawias okrągły. Linia 12. kratka otwórz nawias kwadratowy 6 przecinek 6 przecinek 12 przecinek 19 przecinek 19 przecinek 5 przecinek 15 przecinek 2 przecinek 9 przecinek 19 przecinek 7 przecinek 18 przecinek 10 przecinek 16 przecinek 19 zamknij nawias kwadratowy. Linia 14. print otwórz nawias okrągły lista otwórz nawias kwadratowy dwukropek dwukropek minus 1 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 15. kratka otwórz nawias kwadratowy 19 przecinek 16 przecinek 10 przecinek 18 przecinek 7 przecinek 19 przecinek 9 przecinek 2 przecinek 15 przecinek 5 przecinek 19 przecinek 19 przecinek 12 przecinek 6 przecinek 6 zamknij nawias kwadratowy.
Ważne!

W języku Python listy nie mają z góry ustalonej wielkości. Odwołując się do elementu listy spoza zakresu, otrzymamy błąd.

1
Polecenie 1

Napisz funkcję z jednym parametrem typu lista. W wyniku działania funkcji powinny być wypisane wszystkie elementy listy wraz z ich typem, oddzielone znakiem „-”. Każdy element musi być wypisany od nowej linii.

Operacje na krotkach (tuplach)

Krotki mają podobne możliwości do list, jednak w odróżnieniu do list są niezmienneniezmiennaniezmienne.

Przykład 4

Oto sposób definiowania krotki oraz kilka przykładowych jej użyć:

Linia 1. przykladowa podkreślnik krotka znak równości otwórz nawias okrągły 3 przecinek 2 kropka 14 przecinek cudzysłów Python cudzysłów przecinek True zamknij nawias okrągły. Linia 3. print otwórz nawias okrągły przykladowa podkreślnik krotka otwórz nawias kwadratowy 2 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 4. kratka Python. Linia 6. print otwórz nawias okrągły przykladowa podkreślnik krotka otwórz nawias kwadratowy 2 dwukropek zamknij nawias kwadratowy zamknij nawias okrągły. Linia 7. kratka otwórz nawias okrągły apostrof Python apostrof przecinek True zamknij nawias okrągły. Linia 9. print otwórz nawias okrągły type otwórz nawias okrągły przykladowa podkreślnik krotka otwórz nawias kwadratowy 2 zamknij nawias kwadratowy zamknij nawias okrągły zamknij nawias okrągły. Linia 10. kratka otwórz nawias ostrokątny class apostrof str apostrof zamknij nawias ostrokątny. Linia 12. print otwórz nawias okrągły type otwórz nawias okrągły przykladowa podkreślnik krotka otwórz nawias kwadratowy 2 dwukropek zamknij nawias kwadratowy zamknij nawias okrągły zamknij nawias okrągły. Linia 13. kratka otwórz nawias ostrokątny class apostrof tuple apostrof zamknij nawias ostrokątny.

Podczas operacji wyświetlania nieistniejącego elementu krotki, Python zgłosi błąd. W przypadku próby wpisania danych do istniejącego elementu, również zostanie zgłoszony wyjątek.

Linia 1. przykladowa podkreślnik krotka znak równości otwórz nawias okrągły 3 przecinek 2 kropka 14 przecinek cudzysłów Python cudzysłów przecinek True zamknij nawias okrągły. Linia 3. print otwórz nawias okrągły type otwórz nawias okrągły przykladowa podkreślnik krotka otwórz nawias kwadratowy 15 zamknij nawias kwadratowy zamknij nawias okrągły zamknij nawias okrągły. Linia 4. kratka Traceback otwórz nawias okrągły most recent call last zamknij nawias okrągły dwukropek. Linia 5. kratka File cudzysłów otwórz nawias ostrokątny pyshell kratka 23 zamknij nawias ostrokątny cudzysłów przecinek line 1 przecinek in otwórz nawias ostrokątny module zamknij nawias ostrokątny. Linia 6. kratka print otwórz nawias okrągły type otwórz nawias okrągły przykladowa podkreślnik krotka otwórz nawias kwadratowy 15 zamknij nawias kwadratowy zamknij nawias okrągły zamknij nawias okrągły. Linia 7. kratka IndexError dwukropek tuple index out of range. Linia 9. przykladowa podkreślnik krotka otwórz nawias kwadratowy 1 zamknij nawias kwadratowy znak równości 2. Linia 10. kratka Traceback otwórz nawias okrągły most recent call last zamknij nawias okrągły dwukropek. Linia 11. kratka File cudzysłów otwórz nawias ostrokątny pyshell kratka 24 zamknij nawias ostrokątny cudzysłów przecinek line 1 przecinek in otwórz nawias ostrokątny module zamknij nawias ostrokątny. Linia 12. kratka przykladowa podkreślnik krotka otwórz nawias kwadratowy 1 zamknij nawias kwadratowy znak równości 2. Linia 13. kratka TypeError dwukropek apostrof tuple apostrof object does not support item assignment.

Możemy wykonywać operację nazywaną rozpakowywaniem krotek – polega ona na przypisaniu elementów krotki do pojedynczych zmiennych. Zapoznajmy się z dwoma ciekawymi przykładami.

Linia 1. przykladowa podkreślnik krotka znak równości otwórz nawias okrągły 3 przecinek 2 kropka 14 przecinek cudzysłów Python cudzysłów przecinek True zamknij nawias okrągły. Linia 2. a przecinek b przecinek c przecinek d znak równości przykladowa podkreślnik krotka. Linia 4. print otwórz nawias okrągły a zamknij nawias okrągły. Linia 5. kratka 3. Linia 7. print otwórz nawias okrągły b zamknij nawias okrągły. Linia 8. kratka 2 kropka 14. Linia 10. print otwórz nawias okrągły c zamknij nawias okrągły. Linia 11. kratka Python. Linia 13. print otwórz nawias okrągły d zamknij nawias okrągły. Linia 14. kratka True. Linia 16. kratka ciekawy przykład. Linia 17. x znak równości 2. Linia 18. y znak równości 5. Linia 19. q znak równości minus 1. Linia 20. x przecinek y znak równości q plus y przecinek x plus y plus q. Linia 22. kratka ile wynoszą x oraz y znak zapytania. Linia 23. print otwórz nawias okrągły x zamknij nawias okrągły. Linia 24. kratka 4. Linia 26. print otwórz nawias okrągły y zamknij nawias okrągły. Linia 27. kratka 6.
Ważne!

Drugi z pokazanych przykładów możemy wykorzystać, jeżeli chcemy zamienić między sobą wartości dwóch zmiennych, nie używając przy tym pomocniczej zmiennej:

Zamiana dwóch zmiennych z użyciem pomocniczej zmiennej:

Linia 1. a znak równości 1. Linia 2. b znak równości 2. Linia 3. print otwórz nawias okrągły a przecinek b zamknij nawias okrągły. Linia 4. kratka 1 przecinek 2. Linia 6. pomocnicza podkreślnik zmienna znak równości a. Linia 7. a znak równości b. Linia 8. b znak równości pomocnicza podkreślnik zmienna. Linia 9. print otwórz nawias okrągły a przecinek b zamknij nawias okrągły. Linia 10. kratka 2 przecinek 1.

Zamiana dwóch zmiennych za pomocą rozpakowywania:

Linia 1. a znak równości 1. Linia 2. b znak równości 2. Linia 3. print otwórz nawias okrągły a przecinek b zamknij nawias okrągły. Linia 4. kratka 1 przecinek 2. Linia 6. a przecinek b znak równości b przecinek a. Linia 7. print otwórz nawias okrągły a przecinek b zamknij nawias okrągły. Linia 8. kratka 2 przecinek 1.
Dla zainteresowanych

Ze względu na sposób, w jaki krotki są przechowywane w pamięci, w języku Python zajmują one mniej miejsca niż listy zawierające takie same dane. Ponadto krotki są szybsze w działaniach typu wyszukiwanie elementów. Należy jednak pamiętać, że dane w nich są niezmienne, dlatego w niektórych sytuacjach ich użycie może okazać się niemożliwe.

Wykorzystanie list w języku Python

Specyfikacja problemu:

Dane:

  • lista_danych – lista zawierająca liczby rzeczywiste

Wynik:

Program zwraca długość najdłuższego spójnego nierosnącego podciągu w lista_danych.

Wyszukiwanie pierwszego najdłuższego spójnego nierosnącego podciągu liczb można łatwo zrealizować, posługując się listami. Dokładny opis algorytmu znajduje się w e‑materiale Tablice jednowymiarowe – zadania maturalnePAiVsY5nnTablice jednowymiarowe – zadania maturalne. Na początku inicjujemy zmienne dlugosc_aktualnego_ciagu oraz dlugosc_najdluzszego_ciagu, które będą przechowywać odpowiednio długość obecnego ciągu oraz długość najdłuższego znalezionego nierosnącego ciągu. Ich początkową wartość ustawimy na 1, ponieważ najkrótszy podciąg nierosnący w niepustym ciągu zawsze ma długość 1. Następnie wystarczy odczytywać po kolei elementy listy i sprawdzać, czy są one mniejsze od poprzedniego elementu lub czy są mu równe. Jeśli tak, należy zwiększyć długość badanego właśnie nierosnącego podciągu o jeden, w przeciwnym wypadku zmiennej dlugosc_aktualnego_ciagu nadajemy wartość 1 – uznajemy, że to początek kolejnego podciągu. Następnie sprawdzamy, czy jego długość jest większa od długości poprzedniego najdłuższego ciągu, jeśli tak – uznajemy ją za maksymalną i aktualizujemy wartość zmiennej dlugosc_najdłuższego_ciagu.

Trzeba pamiętać, aby zacząć przeszukiwanie od drugiego elementu listy (o indeksie 1), aby porównać go z poprzednim, czyli pierwszym (o indeksie 0). Zwróćmy uwagę, że długość aktualnego podciągu zawsze zaczyna się od 1. Gdy znajdujemy mniejszy element, to poprzedni (wcześniejszy) już istnieje i należy go wliczyć do podciągu.

Zdefiniujmy funkcję zgodną z podanym algorytmem:

Linia 1. def badanie podkreślnik nierosnacego podkreślnik ciagu otwórz nawias okrągły lista podkreślnik danych zamknij nawias okrągły dwukropek. Linia 2. dlugosc podkreślnik aktualnego podkreślnik ciagu znak równości 1. Linia 3. dlugosc podkreślnik najdluzszego podkreślnik ciagu znak równości 1. Linia 5. for element in range otwórz nawias okrągły 1 przecinek len otwórz nawias okrągły lista podkreślnik danych zamknij nawias okrągły zamknij nawias okrągły dwukropek. Linia 6. badany podkreślnik aktualny znak równości lista podkreślnik danych otwórz nawias kwadratowy element zamknij nawias kwadratowy. Linia 7. badany podkreślnik poprzedni znak równości lista podkreślnik danych otwórz nawias kwadratowy element minus 1 zamknij nawias kwadratowy. Linia 9. if badany podkreślnik aktualny otwórz nawias ostrokątny znak równości badany podkreślnik poprzedni dwukropek. Linia 10. dlugosc podkreślnik aktualnego podkreślnik ciagu plus znak równości 1. Linia 11. else dwukropek. Linia 12. dlugosc podkreślnik aktualnego podkreślnik ciagu znak równości 1. Linia 14. if dlugosc podkreślnik aktualnego podkreślnik ciagu zamknij nawias ostrokątny dlugosc podkreślnik najdluzszego podkreślnik ciagu dwukropek. Linia 15. dlugosc podkreślnik najdluzszego podkreślnik ciagu znak równości dlugosc podkreślnik aktualnego podkreślnik ciagu. Linia 17. return dlugosc podkreślnik najdluzszego podkreślnik ciagu.

Wyszukajmy długość najdłuższego spójnego i nierosnącego podciągu na przykładowej liście:

Linia 1. lista podkreślnik danych znak równości otwórz nawias kwadratowy 789 przecinek 499 przecinek 746 przecinek 50180 przecinek 2 przecinek 38 przecinek 98774 przecinek. Linia 2. 46003 przecinek 316 przecinek 211 przecinek 23064 przecinek 89783 przecinek 197 przecinek 474 przecinek 168 przecinek. Linia 3. 54261 przecinek 68915 przecinek 645 przecinek 567 przecinek 2187 przecinek 949 przecinek 93963 przecinek. Linia 4. 117 przecinek 769 przecinek 65518 przecinek 8446 przecinek 2763 przecinek 205 przecinek 650 przecinek 763 przecinek. Linia 5. 73438 przecinek 824 przecinek 24697 przecinek 766 przecinek 309 przecinek 19019 przecinek 989 przecinek. Linia 6. 578 przecinek 67812 przecinek 21963 przecinek 424 przecinek 193 przecinek 16506 przecinek 83875 przecinek. Linia 7. 382 przecinek 51032 przecinek 331 przecinek 892 przecinek 638 przecinek 473 przecinek 76010 przecinek. Linia 8. 15199 przecinek 44706 przecinek 646 przecinek 59049 przecinek 132 przecinek 1482 przecinek 4524 przecinek. Linia 9. 7792 przecinek 223 przecinek 617 przecinek 785 przecinek 146 zamknij nawias kwadratowy. Linia 10. print otwórz nawias okrągły badanie podkreślnik nierosnacego podkreślnik ciagu otwórz nawias okrągły lista podkreślnik danych zamknij nawias okrągły zamknij nawias okrągły. Linia 11. kratka 4. Linia 13. kratka są to liczby dwukropek 98774 przecinek 46003 przecinek 316 przecinek 211.
Polecenie 2

Napiszmy program, który wykorzysta przedstawioną funkcję i wypisze, z ilu elementów składa się najdłuższy spójny i nierosnący podciąg liczb na liście.

Elementy ciągu wygenerujemy za pomocą wyrażenia listowegowyrażenie listowewyrażenia listowego i funkcji randint().

Jeśli użyjemy funkcji seed(dowolna_liczba), wówczas dla ustalonej wartości dowolna_liczba zawsze uzyskamy identyczne liczby podczas losowania.

Dla zainteresowanych

Jeśli chcemy dokładnie przeanalizować działanie opisanej funkcji, możemy wzbogacić program o polecenie wyświetlania dodatkowych informacji – np. korzystając z wyrażeń indeksujących, uzyskać dane na temat znajdowanych elementów. Oto zmodyfikowana funkcja i efekt jej działania:

Linia 1. def badanie podkreślnik nierosnacego podkreślnik ciagu otwórz nawias okrągły lista zamknij nawias okrągły dwukropek. Linia 2. dlugosc podkreślnik aktualnego podkreślnik ciagu znak równości 1. Linia 3. dlugosc podkreślnik najdluzszego podkreślnik ciagu znak równości 1. Linia 5. for element in range otwórz nawias okrągły 1 przecinek len otwórz nawias okrągły lista zamknij nawias okrągły zamknij nawias okrągły dwukropek. Linia 6. badany podkreślnik aktualny znak równości lista otwórz nawias kwadratowy element zamknij nawias kwadratowy. Linia 7. badany podkreślnik poprzedni znak równości lista otwórz nawias kwadratowy element minus 1 zamknij nawias kwadratowy. Linia 9. if badany podkreślnik aktualny otwórz nawias ostrokątny znak równości badany podkreślnik poprzedni dwukropek. Linia 10. dlugosc podkreślnik aktualnego podkreślnik ciagu plus znak równości 1. Linia 11. else dwukropek. Linia 12. dlugosc podkreślnik aktualnego podkreślnik ciagu znak równości 1. Linia 14. if dlugosc podkreślnik aktualnego podkreślnik ciagu zamknij nawias ostrokątny dlugosc podkreślnik najdluzszego podkreślnik ciagu dwukropek. Linia 15. dlugosc podkreślnik najdluzszego podkreślnik ciagu znak równości dlugosc podkreślnik aktualnego podkreślnik ciagu. Linia 16. print otwórz nawias okrągły dlugosc podkreślnik najdluzszego podkreślnik ciagu przecinek apostrof minus apostrof przecinek lista otwórz nawias kwadratowy element minus dlugosc podkreślnik najdluzszego podkreślnik ciagu plus 1 dwukropek element plus 1 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 18. return dlugosc podkreślnik najdluzszego podkreślnik ciagu. Linia 20. kratka przykładowe wykonanie. Linia 21. lista podkreślnik danych znak równości otwórz nawias kwadratowy 789 przecinek 499 przecinek 449 przecinek 746 przecinek 50180 przecinek 2 przecinek 38 przecinek 98774 przecinek 46003 przecinek. Linia 22. 316 przecinek 211 przecinek 23064 przecinek 89783 przecinek 197 przecinek 474 przecinek 168 przecinek. Linia 23. 54261 przecinek 68915 przecinek 645 przecinek 567 przecinek 2187 przecinek 949 przecinek 93963 przecinek. Linia 24. 117 przecinek 769 przecinek 65518 przecinek 8446 przecinek 2763 przecinek 205 przecinek 650 przecinek 763 przecinek. Linia 25. 73438 przecinek 824 przecinek 24697 przecinek 766 przecinek 309 przecinek 19019 przecinek 989 przecinek. Linia 26. 578 przecinek 67812 przecinek 21963 przecinek 424 przecinek 193 przecinek 16506 przecinek 83875 przecinek. Linia 27. 382 przecinek 51032 przecinek 331 przecinek 892 przecinek 638 przecinek 473 przecinek 76010 przecinek. Linia 28. 15199 przecinek 44706 przecinek 646 przecinek 59049 przecinek 132 przecinek 1482 przecinek 4524 przecinek. Linia 29. 7792 przecinek 223 przecinek 617 przecinek 785 przecinek 146 zamknij nawias kwadratowy. Linia 31. print otwórz nawias okrągły badanie podkreślnik nierosnacego podkreślnik ciagu otwórz nawias okrągły lista podkreślnik danych zamknij nawias okrągły zamknij nawias okrągły. Linia 32. kratka 2 minus otwórz nawias kwadratowy 789 przecinek 499 zamknij nawias kwadratowy. Linia 33. kratka 3 minus otwórz nawias kwadratowy 789 przecinek 499 przecinek 449 zamknij nawias kwadratowy. Linia 34. kratka 4 minus otwórz nawias kwadratowy 98774 przecinek 46003 przecinek 316 przecinek 211 zamknij nawias kwadratowy. Linia 35. kratka 4.
Już wiesz

Podsumujmy najważniejsze elementy tej sekcji:

  • oprócz list Python oferuje także krotki (typ tuple), które zachowują się podobnie do list, z pewnymi ograniczeniami,

  • w języku Python listy czy krotki nie posiadają z góry ustalonej wielkości,

  • każdy element listy czy krotki może być innego typu,

  • w języku Python indeksowanie rozpoczyna się od zera, zatem zapis lista_danych[3] wskazuje czwarty element.

1
Problem 1

Napisz program, który w podanym ciągu liczb znajdzie pierwszy najdłuższy niemalejący spójny podciąg i wypisze go na standardowe wyjście. Rozwiązanie przetestuj dla ciągu [6,7,1,3,4] .

Specyfikacja problemu:

Dane:

  • ciag_liczb – badany ciąg zawierający liczby całkowite

Wynik:

  • Program wypisuje na standardowe wyjście znaleziony podciąg.

RaB9hkdsnmUs72
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.
Polecenie 3

Porównaj swoje rozwiązanie z zaprezentowanym w filmie.

R1J12aFuGROf1
Film nawiązujący do treści materiału. Wprowadzenie do tablic - tablice jednowymiarowe. Realizacja tablic w języku Python.

Kod programu zaprezentowanego w filmie:

R12Pp8WFqucVf

Przycisk do pobrania TXT z kodem źródłowym z filmu.

Plik TXT o rozmiarze 1.07 KB w języku polskim

Słownik

f‑string
f‑string

mechanizm formatowania łańcuchów znaków, dokładnie opisany w dokumencie PEP 498; wprowadzony w języku Python w wersji 3.6, znany również jako Literal String Interpolation; zakłada format: f"Napis, a w nim {zmienna} do wypisania".

krotka, tupla
krotka, tupla

(w języku Python tuple) sekwencyjny typ danych, który przechowuje elementy różnego typu, np. (1, "A", 3.14); od listy różni się tym, że nie jest modyfikowalny

lista
lista

(w języku Python list) sekwencyjny typ danych, który przechowuje elementy różnego typu, np. [1,"A",3.14]; może być modyfikowany

niezmienna
niezmienna

(ang. immutable) sekwencja, która jest niemodyfikowalna „w miejscu”; nie można zmienić żadnego z jej elementów wewnątrz – trzeba stworzyć nowy obiekt, który zawiera zmienione elementy

obiekt iterowany
obiekt iterowany

(ang. iterable) obiekt, który ma budowę sekwencyjną; może być przekazywany do pętli for w celu wyodrębnienia z niego pojedynczych elementów; obiektami iterowanymi są list, str, tuple – przykładowo, [1,3,5], 'Python' lub (3, 6, 'A')

wyjątek
wyjątek

(ang. exception) sposób sygnalizowania przez program sytuacji wyjątkowych (najczęściej błędów); w momencie wyrzucenia wyjątku musi on zostać obsłużony, w przeciwnym wypadku program kończy pracę

wyrażenie indeksujące
wyrażenie indeksujące

(ang. slice) nazywane także wycinkiem, zawarte w nawiasach kwadratowych wyrażenie, które pozwala określić wybraną część sekwencji; może mieć ono postać [a:b], [a] albo [a:b:c]

wyrażenie listowe
wyrażenie listowe

(ang. list compehension) wyrażenie, dzięki któremu możemy wygenerować listę zawierającą określone elementy bez konieczności użycia pętli; przykład wyrażenia listowego generującego listę zawierającą kwadraty liczb od 0 do 10: [x**2 for x in range(11)]

zmienna (modyfikowalna, zmienialna)
zmienna (modyfikowalna, zmienialna)

(ang. mutable) zestaw danych, którego elementy da się zmienić bezpośrednio, bez konieczności tworzenia nowego obiektu i przypisywania wartości jego elementom