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

Tablice dwuwymiarowe: definiowanie macierzy i operacje na ich elementach

Załóżmy, że gramy w statki. Pusta plansza do gry w statki liczy 100 pól.

RsDpmUU212b2X
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Wypełniliśmy już swoją planszę, zaznaczając na niej nasze okręty.

R1XshiBp0nRQM
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Część pól dalej jest pusta, część została zaczerniona (znajdują się na nich okręty). Łatwo sprawdzić, czy dane pole zawiera statek czy nie – nazwa pola składa się z litery i liczby, np. A6.

Plansza składa się z kolumn oraz wierszy. Możemy stwierdzić, że składa się z kilku tablic (uporządkowanych zbiorów elementów tego samego typu) – jest tablicą tablic, czyli tablicą, które elementami są inne tablice.

W języku Python struktury danych, którymi są tablice, będziemy implementować za pomocą list. W naszym przypadku będzie to lista wielowymiarowalista wielowymiarowalista wielowymiarowa.

W tym e‑materiale mówiąc o tablicach, mamy na myśli strukturę danych, która w języku Python implementowana jest za pomocą listy.

Ważne!

Pamiętaj, że w przypadku tablic wszystkie elementy muszą być tego samego typu, natomiast w przypadku list takie ograniczenie już nie obowiązuje. Więcej informacji na temat tablic i list znajdziesz w e‑materiałach:

Aby utworzyć tablicę wielowymiarową w języku Python, możemy posłużyć się zapisem:

Linia 1. tablica podkreślnik w znak równości otwórz nawias kwadratowy otwórz nawias kwadratowy element11 przecinek element12 przecinek element13 zamknij nawias kwadratowy przecinek. Linia 2. otwórz nawias kwadratowy element21 przecinek element22 przecinek element23 zamknij nawias kwadratowy przecinek. Linia 3. otwórz nawias kwadratowy element31 przecinek element32 przecinek element33 zamknij nawias kwadratowy przecinek. Linia 4. zamknij nawias kwadratowy.

Ma ona trzy elementy - każdy z nich jest kolejną tablicą, która również zawiera trzy elementy. Warto jednak podkreślić, że każda z tablic mogłaby mieć dowolną długość.

Ważne!

Zauważmy, że na końcu wiersza numer 3 znajduje się przecinek, pomimo braku kolejnego elementu. Jest to poprawny zapis w języku Python. Dzięki takiej notacji, rozbudowując program, możemy łatwo dodawać kolejne wiersze w tablicy.

Naszą planszę do gry w statki możemy przechować w programie w następujący sposób:

Linia 1. tablica podkreślnik w znak równości otwórz nawias kwadratowy. Linia 2. otwórz nawias kwadratowy 1 przecinek 1 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 1 przecinek 0 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 3. otwórz nawias kwadratowy 0 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 1 przecinek 0 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 4. otwórz nawias kwadratowy 0 przecinek 1 przecinek 1 przecinek 1 przecinek 1 przecinek 0 przecinek 0 przecinek 1 przecinek 0 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 5. otwórz nawias kwadratowy 0 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 1 przecinek 0 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 6. otwórz nawias kwadratowy 0 przecinek 0 przecinek 0 przecinek 1 przecinek 0 przecinek 0 przecinek 0 przecinek 1 przecinek 0 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 7. otwórz nawias kwadratowy 0 przecinek 0 przecinek 0 przecinek 1 przecinek 0 przecinek 0 przecinek 0 przecinek 1 przecinek 0 przecinek 1 zamknij nawias kwadratowy przecinek. Linia 8. otwórz nawias kwadratowy 0 przecinek 0 przecinek 0 przecinek 1 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 1 zamknij nawias kwadratowy przecinek. Linia 9. otwórz nawias kwadratowy 0 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 1 zamknij nawias kwadratowy przecinek. Linia 10. otwórz nawias kwadratowy 0 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 1 przecinek 1 przecinek 0 przecinek 0 przecinek 1 zamknij nawias kwadratowy przecinek. Linia 11. otwórz nawias kwadratowy 0 przecinek 1 przecinek 1 przecinek 1 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 0 zamknij nawias kwadratowy. Linia 12. zamknij nawias kwadratowy.

Tablicę możemy wypełnić danymi w różny sposób, m.in. przez:

  1. przypisanie wartości na etapie jej inicjowania,

  2. utworzenie nowej tablicy na podstawie innej tablicy za pomocą wyrażeń indeksującychwyrażenie indeksującewyrażeń indeksujących,

  3. wykorzystanie generatora,

  4. wstawianie elementów do tablicy, np. podanych przez użytkownika wyników obliczeń.

Ważne!

Odwołując się do konkretnego elementu w przypadku tablic dwuwymiarowych, podajemy dwa indeksy w sąsiadujących nawiasach kwadratowych. Przykładowo, zapis tablica_glowna[i][j] oznacza element o indeksie j w tablicy, która jest i‑tym elementem tablicy tablica_glowna.

Oto przykład zdefiniowania tablicy wielowymiarowej i sposób przywoływania jej elementu:

Linia 1. tablica podkreślnik glowna znak równości otwórz nawias kwadratowy otwórz nawias kwadratowy apostrof a apostrof przecinek apostrof b apostrof przecinek apostrof c apostrof zamknij nawias kwadratowy przecinek. Linia 2. otwórz nawias kwadratowy apostrof d apostrof przecinek apostrof e apostrof przecinek apostrof f apostrof zamknij nawias kwadratowy przecinek. Linia 3. otwórz nawias kwadratowy apostrof g apostrof przecinek apostrof h apostrof przecinek apostrof i apostrof zamknij nawias kwadratowy zamknij nawias kwadratowy. Linia 5. print otwórz nawias okrągły tablica podkreślnik glowna otwórz nawias kwadratowy 0 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 6. kratka Wynik dwukropek otwórz nawias kwadratowy apostrof a apostrof przecinek apostrof b apostrof przecinek apostrof c apostrof zamknij nawias kwadratowy. Linia 8. print otwórz nawias okrągły tablica podkreślnik glowna otwórz nawias kwadratowy 0 zamknij nawias kwadratowy otwórz nawias kwadratowy 0 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 9. kratka Wynik dwukropek apostrof a apostrof. Linia 11. print otwórz nawias okrągły tablica podkreślnik glowna otwórz nawias kwadratowy 0 zamknij nawias kwadratowy otwórz nawias kwadratowy 2 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 12. kratka Wynik dwukropek apostrof c apostrof. Linia 14. print otwórz nawias okrągły tablica podkreślnik glowna otwórz nawias kwadratowy 2 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 15. kratka Wynik dwukropek otwórz nawias kwadratowy apostrof g apostrof przecinek apostrof h apostrof przecinek apostrof i apostrof zamknij nawias kwadratowy. Linia 17. print otwórz nawias okrągły tablica podkreślnik glowna otwórz nawias kwadratowy 2 zamknij nawias kwadratowy otwórz nawias kwadratowy 1 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 18. kratka Wynik dwukropek apostrof h apostrof. Linia 20. print otwórz nawias okrągły tablica podkreślnik glowna otwórz nawias kwadratowy 2 zamknij nawias kwadratowy otwórz nawias kwadratowy 2 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 21. kratka Wynik dwukropek apostrof i apostrof.
Ważne!

Jeżeli odwołamy się do elementu tablicy dwuwymiarowej, podając tylko jeden indeks, otrzymamy tablicę jednowymiarową (która jest elementem tablicy dwuwymiarowej). Podanie indeksu wykraczającego poza zakres dowolnej tablicy kończy się wyświetleniem komunikatu o błędzie: IndexError: list index out of range.

Pamiętajmy, że w języku Pyton występują ujemne indeksy, które wskazują na elementy tablicy, patrząc od jej prawej strony (od tyłu).

Wartości poszczególnych elementów możemy modyfikować w prosty sposób – przez przypisanie. Oto przykład takiej operacji:

Linia 1. tablica podkreślnik a znak równości otwórz nawias kwadratowy 1 przecinek 2 przecinek 3 zamknij nawias kwadratowy. Linia 2. tablica podkreślnik b znak równości otwórz nawias kwadratowy 33 przecinek 23 przecinek 13 przecinek 45 przecinek 56 zamknij nawias kwadratowy. Linia 4. print otwórz nawias okrągły tablica podkreślnik a otwórz nawias kwadratowy 2 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 5. kratka Wynik dwukropek 3. Linia 7. kratka Tu przypisujemy wartość do elementu. Linia 8. tablica podkreślnik a otwórz nawias kwadratowy 2 zamknij nawias kwadratowy znak równości 999. Linia 10. print otwórz nawias okrągły tablica podkreślnik a otwórz nawias kwadratowy 2 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 11. kratka Wynik dwukropek 999. Linia 13. print otwórz nawias okrągły tablica podkreślnik b otwórz nawias kwadratowy 3 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 14. kratka Wynik dwukropek 45. Linia 16. kratka Tu przypisujemy wartość do elementu. Linia 17. tablica podkreślnik b otwórz nawias kwadratowy 3 zamknij nawias kwadratowy znak równości 2020. Linia 18. print otwórz nawias okrągły tablica podkreślnik b otwórz nawias kwadratowy 3 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 19. kratka Wynik dwukropek 2020. Linia 21. print otwórz nawias okrągły tablica podkreślnik b zamknij nawias okrągły. Linia 22. kratka Wynik dwukropek otwórz nawias kwadratowy 33 przecinek 23 przecinek 13 przecinek 2020 przecinek 56 zamknij nawias kwadratowy.

Przeanalizujmy inny przypadek: z dwóch tablic jednowymiarowych o takiej samej liczbie elementów zbudujemy trzecią — dwuwymiarową. Zrobimy to na dwa sposoby:

  • przez proste przypisanie tablic jako elementów,

  • przez przypisanie kopii tablic jako elementów dzięki mechanizmowi wyrażeń indeksujących (slice).

Linia 1. tablica podkreślnik a znak równości otwórz nawias kwadratowy 1 przecinek 2 przecinek 3 zamknij nawias kwadratowy. Linia 2. tablica podkreślnik b znak równości otwórz nawias kwadratowy 33 przecinek 23 przecinek 13 zamknij nawias kwadratowy. Linia 3. tablica podkreślnik duza znak równości otwórz nawias kwadratowy lista podkreślnik a przecinek lista podkreślnik b zamknij nawias kwadratowy. Linia 4. tablica podkreślnik wielka znak równości otwórz nawias kwadratowy lista podkreślnik a otwórz nawias kwadratowy dwukropek zamknij nawias kwadratowy przecinek lista podkreślnik b otwórz nawias kwadratowy dwukropek zamknij nawias kwadratowy zamknij nawias kwadratowy. Linia 5. tablica podkreślnik a otwórz nawias kwadratowy 2 zamknij nawias kwadratowy znak równości 999. Linia 6. tablica podkreślnik b otwórz nawias kwadratowy 1 zamknij nawias kwadratowy znak równości 2002. Linia 8. print otwórz nawias okrągły tablica podkreślnik duza zamknij nawias okrągły. Linia 9. kratka Wynik dwukropek otwórz nawias kwadratowy otwórz nawias kwadratowy 1 przecinek 2 przecinek 999 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 33 przecinek 2002 przecinek 13 zamknij nawias kwadratowy zamknij nawias kwadratowy. Linia 11. print otwórz nawias okrągły tablica podkreślnik wielka zamknij nawias okrągły. Linia 12. kratka Wynik dwukropek otwórz nawias kwadratowy otwórz nawias kwadratowy 1 przecinek 2 przecinek 3 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 33 przecinek 23 przecinek 13 zamknij nawias kwadratowy zamknij nawias kwadratowy.
Dla zainteresowanych

Funkcja del() kasuje nieodwracalnie wskazane indeksem elementy bądź całą strukturę. Więcej na jej temat można przeczytać w dokumentacji języka Python 3.3.

Do dyspozycji mamy też metody:

  • pop(index) – zwraca wartość elementu o numerze index i kasuje ten obiekt,

  • remove(wartość) – kasuje pierwszy element o podanej wartości.

1
Przykład 1

Napiszmy program, który wypisze na ekranie tabliczkę mnożenia dla czynników z przedziału prawostronnie otwartego od poczatkowy do koncowy. Przyjmiemy założenie, że liczba elementów w wierszu i w kolumnie będzie identyczna:

Specyfikacja problemu:

Dane:

  • poczatkowy – początek przedziału

  • koncowy – koniec przedziału

Wynik:

Program wypisuje na ekran tabliczkę mnożenia dla czynników z przedziału prawostronnie otwartego od poczatkowy do koncowy.

Linia 1. poczatkowy znak równości 1. Linia 2. koncowy znak równości 21. Linia 3. tablica znak równości otwórz nawias kwadratowy zamknij nawias kwadratowy. Linia 5. kratka tworzymy pierwszy wiersz przecinek bazując na generatorze listowym. Linia 6. wiersz znak równości otwórz nawias kwadratowy apostrof asterysk apostrof zamknij nawias kwadratowy plus otwórz nawias kwadratowy x for x in range otwórz nawias okrągły poczatkowy przecinek koncowy zamknij nawias okrągły zamknij nawias kwadratowy. Linia 7. dl podkreślnik wiersz znak równości len otwórz nawias okrągły wiersz zamknij nawias okrągły. Linia 8. liczba podkreślnik elementow znak równości koncowy minus poczatkowy. Linia 9. tablica kropka append otwórz nawias okrągły wiersz zamknij nawias okrągły. Linia 11. kratka tworzymy odpowiednią liczbę wierszy otwórz nawias okrągły tablic jednowymiarowych zamknij nawias okrągły. Linia 12. for element in wiersz dwukropek. Linia 13. if element wykrzyknik znak równości apostrof asterysk apostrof dwukropek. Linia 14. nowy podkreślnik wiersz znak równości otwórz nawias kwadratowy element zamknij nawias kwadratowy plus otwórz nawias okrągły otwórz nawias kwadratowy None zamknij nawias kwadratowy asterysk liczba podkreślnik elementow zamknij nawias okrągły. Linia 15. tablica kropka append otwórz nawias okrągły nowy podkreślnik wiersz zamknij nawias okrągły. Linia 17. kratka obliczamy wynik operacji otwórz nawias okrągły mnożenie zamknij nawias okrągły i wpisujemy do odpowiednich. Linia 18. kratka elementów tablic zagnieżdżonych. Linia 19. for i in range otwórz nawias okrągły 1 przecinek dl podkreślnik wiersz zamknij nawias okrągły dwukropek. Linia 20. mnoznik1 znak równości tablica otwórz nawias kwadratowy 0 zamknij nawias kwadratowy otwórz nawias kwadratowy i zamknij nawias kwadratowy. Linia 21. for j in range otwórz nawias okrągły 1 przecinek dl podkreślnik wiersz zamknij nawias okrągły dwukropek. Linia 22. mnoznik2 znak równości tablica otwórz nawias kwadratowy j zamknij nawias kwadratowy otwórz nawias kwadratowy 0 zamknij nawias kwadratowy. Linia 23. wynik znak równości mnoznik1 asterysk mnoznik2. Linia 24. tablica otwórz nawias kwadratowy j zamknij nawias kwadratowy otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości wynik. Linia 26. kratka wypisujemy wyniki na ekranie. Linia 27. print otwórz nawias okrągły apostrof apostrof zamknij nawias okrągły. Linia 28. for wiersz in tablica dwukropek. Linia 29. for element in wiersz dwukropek. Linia 30. print otwórz nawias okrągły cudzysłów otwórz nawias klamrowy dwukropek zamknij nawias ostrokątny 5 zamknij nawias klamrowy kreska pionowa cudzysłów kropka format otwórz nawias okrągły element zamknij nawias okrągły przecinek end znak równości cudzysłów cudzysłów zamknij nawias okrągły. Linia 31. print otwórz nawias okrągły apostrof apostrof zamknij nawias okrągły.

Rezultat działania funkcji wygląda następująco:

Linia 1. asterysk kreska pionowa 1 kreska pionowa 2 kreska pionowa 3 kreska pionowa 4 kreska pionowa 5 kreska pionowa 6 kreska pionowa 7 kreska pionowa 8 kreska pionowa 9 kreska pionowa 10 kreska pionowa 11 kreska pionowa 12 kreska pionowa 13 kreska pionowa 14 kreska pionowa 15 kreska pionowa 16 kreska pionowa 17 kreska pionowa 18 kreska pionowa 19 kreska pionowa 20 kreska pionowa. Linia 2. 1 kreska pionowa 1 kreska pionowa 2 kreska pionowa 3 kreska pionowa 4 kreska pionowa 5 kreska pionowa 6 kreska pionowa 7 kreska pionowa 8 kreska pionowa 9 kreska pionowa 10 kreska pionowa 11 kreska pionowa 12 kreska pionowa 13 kreska pionowa 14 kreska pionowa 15 kreska pionowa 16 kreska pionowa 17 kreska pionowa 18 kreska pionowa 19 kreska pionowa 20 kreska pionowa. Linia 3. 2 kreska pionowa 2 kreska pionowa 4 kreska pionowa 6 kreska pionowa 8 kreska pionowa 10 kreska pionowa 12 kreska pionowa 14 kreska pionowa 16 kreska pionowa 18 kreska pionowa 20 kreska pionowa 22 kreska pionowa 24 kreska pionowa 26 kreska pionowa 28 kreska pionowa 30 kreska pionowa 32 kreska pionowa 34 kreska pionowa 36 kreska pionowa 38 kreska pionowa 40 kreska pionowa. Linia 4. 3 kreska pionowa 3 kreska pionowa 6 kreska pionowa 9 kreska pionowa 12 kreska pionowa 15 kreska pionowa 18 kreska pionowa 21 kreska pionowa 24 kreska pionowa 27 kreska pionowa 30 kreska pionowa 33 kreska pionowa 36 kreska pionowa 39 kreska pionowa 42 kreska pionowa 45 kreska pionowa 48 kreska pionowa 51 kreska pionowa 54 kreska pionowa 57 kreska pionowa 60 kreska pionowa. Linia 5. 4 kreska pionowa 4 kreska pionowa 8 kreska pionowa 12 kreska pionowa 16 kreska pionowa 20 kreska pionowa 24 kreska pionowa 28 kreska pionowa 32 kreska pionowa 36 kreska pionowa 40 kreska pionowa 44 kreska pionowa 48 kreska pionowa 52 kreska pionowa 56 kreska pionowa 60 kreska pionowa 64 kreska pionowa 68 kreska pionowa 72 kreska pionowa 76 kreska pionowa 80 kreska pionowa. Linia 6. 5 kreska pionowa 5 kreska pionowa 10 kreska pionowa 15 kreska pionowa 20 kreska pionowa 25 kreska pionowa 30 kreska pionowa 35 kreska pionowa 40 kreska pionowa 45 kreska pionowa 50 kreska pionowa 55 kreska pionowa 60 kreska pionowa 65 kreska pionowa 70 kreska pionowa 75 kreska pionowa 80 kreska pionowa 85 kreska pionowa 90 kreska pionowa 95 kreska pionowa 100 kreska pionowa. Linia 7. 6 kreska pionowa 6 kreska pionowa 12 kreska pionowa 18 kreska pionowa 24 kreska pionowa 30 kreska pionowa 36 kreska pionowa 42 kreska pionowa 48 kreska pionowa 54 kreska pionowa 60 kreska pionowa 66 kreska pionowa 72 kreska pionowa 78 kreska pionowa 84 kreska pionowa 90 kreska pionowa 96 kreska pionowa 102 kreska pionowa 108 kreska pionowa 114 kreska pionowa 120 kreska pionowa. Linia 8. 7 kreska pionowa 7 kreska pionowa 14 kreska pionowa 21 kreska pionowa 28 kreska pionowa 35 kreska pionowa 42 kreska pionowa 49 kreska pionowa 56 kreska pionowa 63 kreska pionowa 70 kreska pionowa 77 kreska pionowa 84 kreska pionowa 91 kreska pionowa 98 kreska pionowa 105 kreska pionowa 112 kreska pionowa 119 kreska pionowa 126 kreska pionowa 133 kreska pionowa 140 kreska pionowa. Linia 9. 8 kreska pionowa 8 kreska pionowa 16 kreska pionowa 24 kreska pionowa 32 kreska pionowa 40 kreska pionowa 48 kreska pionowa 56 kreska pionowa 64 kreska pionowa 72 kreska pionowa 80 kreska pionowa 88 kreska pionowa 96 kreska pionowa 104 kreska pionowa 112 kreska pionowa 120 kreska pionowa 128 kreska pionowa 136 kreska pionowa 144 kreska pionowa 152 kreska pionowa 160 kreska pionowa. Linia 10. 9 kreska pionowa 9 kreska pionowa 18 kreska pionowa 27 kreska pionowa 36 kreska pionowa 45 kreska pionowa 54 kreska pionowa 63 kreska pionowa 72 kreska pionowa 81 kreska pionowa 90 kreska pionowa 99 kreska pionowa 108 kreska pionowa 117 kreska pionowa 126 kreska pionowa 135 kreska pionowa 144 kreska pionowa 153 kreska pionowa 162 kreska pionowa 171 kreska pionowa 180 kreska pionowa. Linia 11. 10 kreska pionowa 10 kreska pionowa 20 kreska pionowa 30 kreska pionowa 40 kreska pionowa 50 kreska pionowa 60 kreska pionowa 70 kreska pionowa 80 kreska pionowa 90 kreska pionowa 100 kreska pionowa 110 kreska pionowa 120 kreska pionowa 130 kreska pionowa 140 kreska pionowa 150 kreska pionowa 160 kreska pionowa 170 kreska pionowa 180 kreska pionowa 190 kreska pionowa 200 kreska pionowa. Linia 12. 11 kreska pionowa 11 kreska pionowa 22 kreska pionowa 33 kreska pionowa 44 kreska pionowa 55 kreska pionowa 66 kreska pionowa 77 kreska pionowa 88 kreska pionowa 99 kreska pionowa 110 kreska pionowa 121 kreska pionowa 132 kreska pionowa 143 kreska pionowa 154 kreska pionowa 165 kreska pionowa 176 kreska pionowa 187 kreska pionowa 198 kreska pionowa 209 kreska pionowa 220 kreska pionowa. Linia 13. 12 kreska pionowa 12 kreska pionowa 24 kreska pionowa 36 kreska pionowa 48 kreska pionowa 60 kreska pionowa 72 kreska pionowa 84 kreska pionowa 96 kreska pionowa 108 kreska pionowa 120 kreska pionowa 132 kreska pionowa 144 kreska pionowa 156 kreska pionowa 168 kreska pionowa 180 kreska pionowa 192 kreska pionowa 204 kreska pionowa 216 kreska pionowa 228 kreska pionowa 240 kreska pionowa. Linia 14. 13 kreska pionowa 13 kreska pionowa 26 kreska pionowa 39 kreska pionowa 52 kreska pionowa 65 kreska pionowa 78 kreska pionowa 91 kreska pionowa 104 kreska pionowa 117 kreska pionowa 130 kreska pionowa 143 kreska pionowa 156 kreska pionowa 169 kreska pionowa 182 kreska pionowa 195 kreska pionowa 208 kreska pionowa 221 kreska pionowa 234 kreska pionowa 247 kreska pionowa 260 kreska pionowa. Linia 15. 14 kreska pionowa 14 kreska pionowa 28 kreska pionowa 42 kreska pionowa 56 kreska pionowa 70 kreska pionowa 84 kreska pionowa 98 kreska pionowa 112 kreska pionowa 126 kreska pionowa 140 kreska pionowa 154 kreska pionowa 168 kreska pionowa 182 kreska pionowa 196 kreska pionowa 210 kreska pionowa 224 kreska pionowa 238 kreska pionowa 252 kreska pionowa 266 kreska pionowa 280 kreska pionowa. Linia 16. 15 kreska pionowa 15 kreska pionowa 30 kreska pionowa 45 kreska pionowa 60 kreska pionowa 75 kreska pionowa 90 kreska pionowa 105 kreska pionowa 120 kreska pionowa 135 kreska pionowa 150 kreska pionowa 165 kreska pionowa 180 kreska pionowa 195 kreska pionowa 210 kreska pionowa 225 kreska pionowa 240 kreska pionowa 255 kreska pionowa 270 kreska pionowa 285 kreska pionowa 300 kreska pionowa. Linia 17. 16 kreska pionowa 16 kreska pionowa 32 kreska pionowa 48 kreska pionowa 64 kreska pionowa 80 kreska pionowa 96 kreska pionowa 112 kreska pionowa 128 kreska pionowa 144 kreska pionowa 160 kreska pionowa 176 kreska pionowa 192 kreska pionowa 208 kreska pionowa 224 kreska pionowa 240 kreska pionowa 256 kreska pionowa 272 kreska pionowa 288 kreska pionowa 304 kreska pionowa 320 kreska pionowa. Linia 18. 17 kreska pionowa 17 kreska pionowa 34 kreska pionowa 51 kreska pionowa 68 kreska pionowa 85 kreska pionowa 102 kreska pionowa 119 kreska pionowa 136 kreska pionowa 153 kreska pionowa 170 kreska pionowa 187 kreska pionowa 204 kreska pionowa 221 kreska pionowa 238 kreska pionowa 255 kreska pionowa 272 kreska pionowa 289 kreska pionowa 306 kreska pionowa 323 kreska pionowa 340 kreska pionowa. Linia 19. 18 kreska pionowa 18 kreska pionowa 36 kreska pionowa 54 kreska pionowa 72 kreska pionowa 90 kreska pionowa 108 kreska pionowa 126 kreska pionowa 144 kreska pionowa 162 kreska pionowa 180 kreska pionowa 198 kreska pionowa 216 kreska pionowa 234 kreska pionowa 252 kreska pionowa 270 kreska pionowa 288 kreska pionowa 306 kreska pionowa 324 kreska pionowa 342 kreska pionowa 360 kreska pionowa. Linia 20. 19 kreska pionowa 19 kreska pionowa 38 kreska pionowa 57 kreska pionowa 76 kreska pionowa 95 kreska pionowa 114 kreska pionowa 133 kreska pionowa 152 kreska pionowa 171 kreska pionowa 190 kreska pionowa 209 kreska pionowa 228 kreska pionowa 247 kreska pionowa 266 kreska pionowa 285 kreska pionowa 304 kreska pionowa 323 kreska pionowa 342 kreska pionowa 361 kreska pionowa 380 kreska pionowa. Linia 21. 20 kreska pionowa 20 kreska pionowa 40 kreska pionowa 60 kreska pionowa 80 kreska pionowa 100 kreska pionowa 120 kreska pionowa 140 kreska pionowa 160 kreska pionowa 180 kreska pionowa 200 kreska pionowa 220 kreska pionowa 240 kreska pionowa 260 kreska pionowa 280 kreska pionowa 300 kreska pionowa 320 kreska pionowa 340 kreska pionowa 360 kreska pionowa 380 kreska pionowa 400 kreska pionowa.
Ciekawostka

Do operowania na elementach listy lub tablicy możemy wykorzystać też funkcję enumerate(iterobiekt iterowanyiter), która zwraca obiekt typu tuple (indeks oraz wartość danego elementu), na przykład:

Linia 1. elementy znak równości otwórz nawias kwadratowy apostrof Python apostrof przecinek 3 kropka 6 przecinek apostrof Linux apostrof przecinek apostrof Windows apostrof przecinek apostrof MacOS apostrof zamknij nawias kwadratowy. Linia 2. for ind przecinek wart in enumerate otwórz nawias okrągły elementy zamknij nawias okrągły dwukropek. Linia 3. print otwórz nawias okrągły apostrof Indeks apostrof przecinek ind przecinek apostrof Wartość apostrof przecinek wart zamknij nawias okrągły. Linia 5. Indeks 0 Wartość Python. Linia 6. Indeks 1 Wartość 3 kropka 6. Linia 7. Indeks 2 Wartość Linux. Linia 8. Indeks 3 Wartość Windows. Linia 9. Indeks 4 Wartość MacOS. Linia 11. elementy podkreślnik dwuwymiarowe znak równości otwórz nawias kwadratowy otwórz nawias kwadratowy 1 przecinek 2 przecinek 3 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 4 przecinek 5 przecinek 6 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 7 przecinek 8 przecinek 9 zamknij nawias kwadratowy zamknij nawias kwadratowy. Linia 12. for ind przecinek wart in enumerate otwórz nawias okrągły elementy podkreślnik dwuwymiarowe zamknij nawias okrągły dwukropek. Linia 13. print otwórz nawias okrągły apostrof Indeks apostrof przecinek ind przecinek apostrof Wartość apostrof przecinek wart zamknij nawias okrągły. Linia 14. Indeks 0 Wartość otwórz nawias kwadratowy 1 przecinek 2 przecinek 3 zamknij nawias kwadratowy. Linia 15. Indeks 1 Wartość otwórz nawias kwadratowy 4 przecinek 5 przecinek 6 zamknij nawias kwadratowy. Linia 16. Indeks 2 Wartość otwórz nawias kwadratowy 7 przecinek 8 przecinek 9 zamknij nawias kwadratowy.

Operacje na macierzach

Tablice dwuwymiarowe mogą posłużyć do przeprowadzania operacji na macierzachmacierzmacierzach.

21
Przykład 2

Napiszmy funkcję obliczającą sumę dwóch macierzy, pamiętając, że możemy dodawać tylko macierze o tych samych wymiarach.

Działanie programu przetestujemy dla macierzy:

Linia 1. A znak równości otwórz nawias kwadratowy otwórz nawias kwadratowy 1 przecinek 2 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 3 przecinek 4 zamknij nawias kwadratowy zamknij nawias kwadratowy. Linia 2. B znak równości otwórz nawias kwadratowy otwórz nawias kwadratowy 5 przecinek 6 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 7 przecinek 8 zamknij nawias kwadratowy zamknij nawias kwadratowy.

Specyfikacja problemu:

Dane:

  • A - składnik dodawania; macierz kwadratowa rozmiaru n × n

  • B - składnik dodawania; macierz kwadratowa rozmiaru n × n

Wyniki:

  • C - wynik dodawania macierzy A + B; macierz kwadratowa rozmiaru n × n

Oto dwie macierze (tablice/listy dwuwymiarowe):

Macierz A

A = [ a b c d ]

Którą w kodzie możemy zapisać jako:

Linia 1. A znak równości otwórz nawias kwadratowy otwórz nawias kwadratowy a przecinek b zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy c przecinek d zamknij nawias kwadratowy zamknij nawias kwadratowy.

Macierz B

Którą w kodzie możemy zapisać jako:

Linia 1. B znak równości otwórz nawias kwadratowy otwórz nawias kwadratowy e przecinek f zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy g przecinek h zamknij nawias kwadratowy zamknij nawias kwadratowy.

Macierz C

Operacja dodawania dwóch macierzy C = A + B polega na dodawaniu elementów o takich samych indeksach, czyli C[i][j] = A[i][j] + B[i][j].

Którą w kodzie możemy zapisać jako:

Linia 1. C znak równości otwórz nawias kwadratowy otwórz nawias kwadratowy a plus e przecinek b plus f zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy c plus g przecinek d plus h zamknij nawias kwadratowy zamknij nawias kwadratowy.

Korzystając z takiej definicji, możemy zapisać funkcję w języku Python:

Linia 1. def suma podkreślnik macierzy otwórz nawias okrągły A przecinek B zamknij nawias okrągły dwukropek. Linia 2. rozmiar podkreślnik macierzy znak równości len otwórz nawias okrągły A zamknij nawias okrągły. Linia 3. C znak równości otwórz nawias kwadratowy otwórz nawias kwadratowy 0 for i in range otwórz nawias okrągły rozmiar podkreślnik macierzy zamknij nawias okrągły zamknij nawias kwadratowy for i in range otwórz nawias okrągły rozmiar podkreślnik macierzy zamknij nawias okrągły zamknij nawias kwadratowy. Linia 5. for x in range otwórz nawias okrągły rozmiar podkreślnik macierzy zamknij nawias okrągły dwukropek. Linia 6. for y in range otwórz nawias okrągły rozmiar podkreślnik macierzy zamknij nawias okrągły dwukropek. Linia 7. C otwórz nawias kwadratowy x zamknij nawias kwadratowy otwórz nawias kwadratowy y zamknij nawias kwadratowy znak równości A otwórz nawias kwadratowy x zamknij nawias kwadratowy otwórz nawias kwadratowy y zamknij nawias kwadratowy plus B otwórz nawias kwadratowy x zamknij nawias kwadratowy otwórz nawias kwadratowy y zamknij nawias kwadratowy. Linia 9. return C.

Wynikiem jej działania jest macierz C będąca wynikiem operacji dodawania macierzy C = A + B

Linia 1. A znak równości otwórz nawias kwadratowy otwórz nawias kwadratowy 1 przecinek 2 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 3 przecinek 4 zamknij nawias kwadratowy zamknij nawias kwadratowy. Linia 2. B znak równości otwórz nawias kwadratowy otwórz nawias kwadratowy 5 przecinek 6 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 7 przecinek 8 zamknij nawias kwadratowy zamknij nawias kwadratowy. Linia 4. print otwórz nawias okrągły suma podkreślnik macierzy otwórz nawias okrągły A przecinek B zamknij nawias okrągły zamknij nawias okrągły. Linia 5. kratka Wynik dwukropek otwórz nawias kwadratowy otwórz nawias kwadratowy 6 przecinek 8 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 10 przecinek 12 zamknij nawias kwadratowy zamknij nawias kwadratowy.

Co w sytuacji, kiedy do czynienia mamy z macierzą prostokątną o wymiarach n × m? Zapoznaj się z implementacją.

Linia 1. def suma podkreślnik macierzy otwórz nawias okrągły A przecinek B zamknij nawias okrągły dwukropek. Linia 2. n znak równości len otwórz nawias okrągły A zamknij nawias okrągły. Linia 3. m znak równości len otwórz nawias okrągły A otwórz nawias kwadratowy 0 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 4. C znak równości otwórz nawias kwadratowy otwórz nawias kwadratowy 0 for i in range otwórz nawias okrągły m zamknij nawias okrągły zamknij nawias kwadratowy for i in range otwórz nawias okrągły n zamknij nawias okrągły zamknij nawias kwadratowy. Linia 6. for x in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 7. for y in range otwórz nawias okrągły m zamknij nawias okrągły dwukropek. Linia 8. C otwórz nawias kwadratowy x zamknij nawias kwadratowy otwórz nawias kwadratowy y zamknij nawias kwadratowy znak równości A otwórz nawias kwadratowy x zamknij nawias kwadratowy otwórz nawias kwadratowy y zamknij nawias kwadratowy plus B otwórz nawias kwadratowy x zamknij nawias kwadratowy otwórz nawias kwadratowy y zamknij nawias kwadratowy. Linia 10. return C. Linia 12. A znak równości otwórz nawias kwadratowy otwórz nawias kwadratowy 1 przecinek 2 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 3 przecinek 4 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 3 przecinek 4 zamknij nawias kwadratowy zamknij nawias kwadratowy. Linia 13. B znak równości otwórz nawias kwadratowy otwórz nawias kwadratowy 5 przecinek 6 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 7 przecinek 8 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 7 przecinek 8 zamknij nawias kwadratowy zamknij nawias kwadratowy. Linia 15. print otwórz nawias okrągły suma podkreślnik macierzy otwórz nawias okrągły A przecinek B zamknij nawias okrągły zamknij nawias okrągły.

Przykłady operacji na tablicach n‑wymiarowych

W języku Python nie ma ograniczeń w stosunku do liczby zagnieżdżonych tablic. Możemy z łatwością stworzyć tablicę trójwymiarową.

21
Przykład 3

Oto przykład tablicy z trzema wymiarami, czyli tablicy zagnieżdżonej w tablicy, która jest zagnieżdżona w kolejnej tablicy:

Linia 1. lw znak równości otwórz nawias kwadratowy otwórz nawias kwadratowy otwórz nawias kwadratowy 1 przecinek 2 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 3 przecinek 4 zamknij nawias kwadratowy zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy otwórz nawias kwadratowy 5 przecinek 6 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 7 przecinek 8 zamknij nawias kwadratowy zamknij nawias kwadratowy zamknij nawias kwadratowy. Linia 3. kratka przykłady wyświetlania poszczególny elementów wskazywanych poprzez indeksy. Linia 4. print otwórz nawias okrągły lw otwórz nawias kwadratowy 1 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 5. otwórz nawias kwadratowy otwórz nawias kwadratowy 5 przecinek 6 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 7 przecinek 8 zamknij nawias kwadratowy zamknij nawias kwadratowy. Linia 7. print otwórz nawias okrągły lw otwórz nawias kwadratowy 0 zamknij nawias kwadratowy otwórz nawias kwadratowy 1 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 8. otwórz nawias kwadratowy 3 przecinek 4 zamknij nawias kwadratowy. Linia 10. print otwórz nawias okrągły lw otwórz nawias kwadratowy 1 zamknij nawias kwadratowy otwórz nawias kwadratowy 1 zamknij nawias kwadratowy otwórz nawias kwadratowy 0 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 11. 7.

Możemy również wykorzystać pętle, aby pokazać kolejne zagnieżdżenia:

Linia 1. lw znak równości otwórz nawias kwadratowy otwórz nawias kwadratowy otwórz nawias kwadratowy 1 przecinek 2 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 3 przecinek 4 zamknij nawias kwadratowy zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy otwórz nawias kwadratowy 5 przecinek 6 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 7 przecinek 8 zamknij nawias kwadratowy zamknij nawias kwadratowy zamknij nawias kwadratowy. Linia 3. for element in lw dwukropek. Linia 4. print otwórz nawias okrągły element przecinek type otwórz nawias okrągły element zamknij nawias okrągły zamknij nawias okrągły. Linia 5. print otwórz nawias okrągły cudzysłów Wewnątrz 1 dwukropek cudzysłów zamknij nawias okrągły. Linia 6. for elem in element dwukropek. Linia 7. print otwórz nawias okrągły elem przecinek type otwórz nawias okrągły elem zamknij nawias okrągły zamknij nawias okrągły. Linia 8. print otwórz nawias okrągły cudzysłów znak równości zamknij nawias ostrokątny Wewnątrz 2 dwukropek cudzysłów zamknij nawias okrągły. Linia 9. for elem2 in elem dwukropek. Linia 10. print otwórz nawias okrągły elem2 przecinek type otwórz nawias okrągły elem2 zamknij nawias okrągły zamknij nawias okrągły. Linia 12. kratka efekt wykonania. Linia 14. otwórz nawias kwadratowy otwórz nawias kwadratowy 1 przecinek 2 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 3 przecinek 4 zamknij nawias kwadratowy zamknij nawias kwadratowy otwórz nawias ostrokątny class apostrof list apostrof zamknij nawias ostrokątny. Linia 15. Wewnątrz 1 dwukropek. Linia 16. otwórz nawias kwadratowy 1 przecinek 2 zamknij nawias kwadratowy otwórz nawias ostrokątny class apostrof list apostrof zamknij nawias ostrokątny. Linia 17. znak równości zamknij nawias ostrokątny Wewnątrz 2 dwukropek. Linia 18. 1 otwórz nawias ostrokątny class apostrof int apostrof zamknij nawias ostrokątny. Linia 19. 2 otwórz nawias ostrokątny class apostrof int apostrof zamknij nawias ostrokątny. Linia 20. otwórz nawias kwadratowy 3 przecinek 4 zamknij nawias kwadratowy otwórz nawias ostrokątny class apostrof list apostrof zamknij nawias ostrokątny. Linia 21. znak równości zamknij nawias ostrokątny Wewnątrz 2 dwukropek. Linia 22. 3 otwórz nawias ostrokątny class apostrof int apostrof zamknij nawias ostrokątny. Linia 23. 4 otwórz nawias ostrokątny class apostrof int apostrof zamknij nawias ostrokątny. Linia 24. otwórz nawias kwadratowy otwórz nawias kwadratowy 5 przecinek 6 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 7 przecinek 8 zamknij nawias kwadratowy zamknij nawias kwadratowy otwórz nawias ostrokątny class apostrof list apostrof zamknij nawias ostrokątny. Linia 25. Wewnątrz 1 dwukropek. Linia 26. otwórz nawias kwadratowy 5 przecinek 6 zamknij nawias kwadratowy otwórz nawias ostrokątny class apostrof list apostrof zamknij nawias ostrokątny. Linia 27. znak równości zamknij nawias ostrokątny Wewnątrz 2 dwukropek. Linia 28. 5 otwórz nawias ostrokątny class apostrof int apostrof zamknij nawias ostrokątny. Linia 29. 6 otwórz nawias ostrokątny class apostrof int apostrof zamknij nawias ostrokątny. Linia 30. otwórz nawias kwadratowy 7 przecinek 8 zamknij nawias kwadratowy otwórz nawias ostrokątny class apostrof list apostrof zamknij nawias ostrokątny. Linia 31. znak równości zamknij nawias ostrokątny Wewnątrz 2 dwukropek. Linia 32. 7 otwórz nawias ostrokątny class apostrof int apostrof zamknij nawias ostrokątny. Linia 33. 8 otwórz nawias ostrokątny class apostrof int apostrof zamknij nawias ostrokątny.
Dla zainteresowanych

Istnieje moduł o nazwie NumPy – umożliwia on wykonywanie operacji na tablicach liczb.

Słownik

lista wielowymiarowa
lista wielowymiarowa

lista złożona z elementów będących listami; w języku Python nie ma ograniczeń co do jej rozmiarów (poza ilością dostępnej pamięci)

macierz
macierz

zbiór liczb lub wyrażeń zapisanych w postaci prostokątnej tablicy

obiekt iterowany
obiekt iterowany

(ang. iterable) obiekt, który ma budowę sekwencyjną; może być przekazywany do pętli for w celu zwracania pojedynczych elementów większej całości; obiektami iterowanymi są  list, string, tuple, np. [1, 3, 5] lub 'Python' lub (3, 6, 'A')

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

(ang. slice) wyrażanie zwracające wycinek obiektu iterowanego (lista, krotka, napis, itp.), zapisywane za pomocą nawiasów kwadratowych obiekt_iterowany[start:stop:krok], które jako argumenty przyjmuje początek, koniec (wyłącznie) oraz krok wycinka; przykładowo wyrażenie "Przyklad"[0:4:2] da wynik Pz (zwraca znaki pod indeksami 0 oraz 2)