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()
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
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
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.
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ść].
Napisz program, który doda do siebie dwie macierze.
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.
3 3 1 2 3 2 2 3 2 4 5 2 3 3 3 3 3 1 1 2
3 5 6 5 5 6 3 5 7
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()