Kurs maturalny z języka angielskiego!
kurs-maturalny-jezyk-angielski

PROGRAMOWANIE I ALGORYTMY

Zajęcia maturalne z informatyki
Olimpiada Informatyczna Juniorów
    Prowadzący: Marcin Kasprowicz
  • właściciel serwisu algorytm.edu.pl
  • wrzesień 2024 — start zajęć
  • czytaj więcej

Python — tablice dwuwymiarowe


powrót

Wyobraź sobie, że musisz na maturze wczytać macierz dwuwymiarową, tzn. musisz wczytać n wierszy, a w każdym wierszu znajduje się po m liczb (lub innych elementów). Aby w języku Python przechować dane tego typu, możesz użyć listy, której elementami są także listy (tzw. zagnieżdżanie list). Na początek postaramy się wczytać i wypisać w tej samej postaci poniższe dane:

4 3
1 2 3
1 2 3
5 5 5
6 6 6

Pierwsze dwie liczby, 4 i 3, definiują rozmiar macierzy: macierz składa się z czterech wierszy, w każdym wierszu znajdują się po trzy elementy.

lista = [] # tu będziemy przechowywać macierz
n, m = map(int, input().split()) # wczytujemy wiersz z danymi i rzutujemy je na dwie liczby całkowite 

for i in range(n):
   lista.append(list(map(int, input().split()))) # wczytaj wiersz z danymi, rozdziel je oraz zrzutuj na listę liczb całkowitych

for i in range(n):
    for j in range(m):
        print(lista[i][j], end=' ') # wypisz wczytaną macierz
    print()

Odwoływanie się do poszczególnych elementów listy

Aby odwołać się do całego wiersza, wystarczy w nawiasie kwadratowym podać jego numer, pamiętając, że indeksujemy od zera:

lista = [] # tu będziemy przechowywać macierz

n = int(input("Podaj liczbę wierszy: "))

for i in range(n):
   lista.append(list(map(int, input("Wczytaj wiersz nr "+str(i)+": ").split()))) # wczytaj wiersz z danymi, następnie zrzutuje je na listę liczb całkowitych

i = int(input("Podaj numer wiersza, który chcesz wypisać: "))

print(lista[i]) # lub
print(*lista[i]) # rozpakuj listę i przekaż jej elementy do funkcji print
Przykładowe wejście/wyjście
Podaj liczbę wierszy: 3
Wczytaj wiersz nr 0: 1 2 3
Wczytaj wiersz nr 1: 11 22 33
Wczytaj wiersz nr 2: 111 222 333
Podaj numer wiersza, który chcesz wypisać: 1
['11', '22', '33']
11 22 33

Aby odwołać się do elementu znajdującego się w i-tym wierszu oraz w j-tej kolumnie, należy podać w pierwszym nawiasie kwadratowym numer wiersza, a w drugim numer elementu w tym wierszu (elementy także numerujemy od zera):

lista = [] # tu będziemy przechowywać macierz

n = int(input("Podaj liczbę wierszy: "))

for i in range(n):
   lista.append(list(map(int, input("Wczytaj wiersz nr "+str(i)+": ").split()))) # wczytaj wiersz z danymi, następnie zrzutuje je na listę liczb całkowitych

i = int(input("Podaj numer wiersza: "))
j = int(input("Podaj numer elementu w tym wierszu: "))

try:
    print(lista[i][j])
except:
    print("Podałeś błędny numer wiersza lub/i numer kolumny")
Podaj liczbę wierszy: 3
Wczytaj wiersz nr 0: 1 2 3
Wczytaj wiersz nr 1: 4 5 6
Wczytaj wiersz nr 2: 7 8 9
Podaj numer wiersza: 2
Podaj numer elementu w tym wierszu: 2
9

Można prościej

Aby utworzyć pustą tablicę dwuwymiarową złożoną z n pustych list możesz użyć konstrukcji:

n = int(input("Podaj liczbę elementów listy: ")) # np 5
lista = [list() for i in range(n)] #tworzymy n pustych list
print(lista) # [[], [], [], [], []]

Aby utworzyć macierz o wymiarach 5 x 7 wypełnioną zerami możesz użyć konstrukcji:

lista = [[0 for _ in range(7)] for _ in range(5)]
print(lista) #[[0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0]]

Gdzie instrukcja [0 for _ in range(7)] tworzy siedem wyzerowanych komórek listy (jeden wiersz), natomiast [[0 for _ in range(7)] for _ in range(5)] tworzy pięć takich wierszy.

Tablice wielowymiarowe

Tablicę trójwymiarową stworzysz, zagnieżdżając jeszcze bardziej listę. Opierając się na powyższym przykładzie, należy każdy element wiersza wczytać jako kolejną listę. Do takiego elementu odwołać można się za pomocą trzech nawiasów kwadratowych: lista[nr_wiersza][nr_kolumny][wysokość].

Zadanie

Napisz program, który doda do siebie dwie macierze.

Wejście

W pierwszym wierszu liczba określająca ilość zestawów danych.
Każdy zestaw składa się z następujących danych:
W pierwszej linii dwie liczby określające rozmiar macierzy (1 < a, b < 100).
Następnie wczytanie pierwszej macierzy:
a wierszy po b liczb.
I analogicznie wczytanie drugiej macierzy.

Przykład
Wejście
3 3
1 2 3
2 2 3
2 4 5
2 3 3
3 3 3
1 1 2
Wyjście
3 5 6 
5 5 6 
3 5 7

Rozwiązanie


n, m = map(int, input().split())
macierz1 = [list(map(int, input().split())) for _ in range(n)]
macierz2 = [list(map(int, input().split())) for _ in range(n)]
#suma macierzy
for i in range(n):
	for j in range(m):
		print(macierz1[i][j]+macierz2[i][j], end = ' ')
	print()