Professional Documents
Culture Documents
2 вимірні масиви Пайтон
2 вимірні масиви Пайтон
Двовимірні масиви
1234
56
789
Введення двовимірного масиву
Нехай програма отримує на вхід двовимірний масив, у вигляді n рядків, кожен з яких містить m
чисел, розділених пробілами.
n = int(input())
a = []
for i in range(n):
a.append([int(j) for j in input().split()])
print(a) Або, без використання складних вкладених викликів функцій:
n = int(input())
a = []
for i in range(n):
row = input().split()
for i in range(len(row)):
row[i] = int(row[i])
a.append(row)
Ви можете зробити те ж саме з генераторами:
n = int(input())
a = [[int(j) for j in input().split()] for i in range(n)]
print(a)
Обробка і виведення вкладених списків
Змінна циклу for в Python може перебирати не тільки діапазон, який створюється за допомогою
функції range(), але і взагалі перебирати будь-які елементи будь-якій послідовності.
Природно,
для виведення одного рядка можна скористатися методом join (): 1234
for row in a:
56
print(' '.join([str(elem) for elem in row])) 789
Обробка і виведення вкладених списків
Використовуємо два вкладених циклу для підрахунку суми всіх чисел в списку:
from random import randint [[77, 35, 55], [43, 46, 27], [43, 58, 63]]
N=3
M=3 Оскільки людина сприймає
A = [ [0]*M for i in range(N) ] матрицю як таблицю, краще і на
for i in range(N): екран виводити її у вигляді таблиці,
for j in range(M):
для цього можна написати таку
A[i][j] = randint( 20, 80 )
print(A)
процедуру.
def printMatrix( A ):
for i in range(len(A)):
for j in range(len(A[i])):
print( "{:4d}".format(A[i][j]), end="" )
print()
Тут i - це номер рядка, а j - номер стовпця; len (A) - це число рядків в матриці,
а len (A [i]) - число елементів в рядку i (збігається з числом стовпців).
Можна написати таку функцію і в стилі Python :
def printMatrix ( A ):
for row in A:
for x in row:
print( "{:4}".format(x), end="" )
print( )
summa = 0
for i in range(N):
for j in range(M):
summa += A[i][j]
print(summa)
Приклад: Дано цілочисельну матрицю випадкових цілих чисел розміром m*n (m і n задаються
користувачем). Знайти мінімальний елемент матриці та його індекси.
import random
n=int(input('Введіть кількість рядків матриці: '))
m=int(input('Введіть кількість стовпців матриці: '))
a=[]
for i in range(n):
b=[]
for j in range(m):
x=random.randint(10,99)
b.append(x)
a.append(b)
print('Згенерована матриця:',a) Введіть кількість рядків матриці: 4
Введіть кількість стовпців матриці: 4
for row in a:
Згенерована матриця:
for elem in row: 95 27 16 80
print(elem, end=' ') 52 10 68 12
print() 53 73 12 92
98 97 81 73
Знайти мінімальний елемент матриці та його індекси.
. . . . .
min_el=a[0][0]
min_i=0
min_j=0
Введіть кількість рядків матриці: 4
for i in range(n):
Введіть кількість стовпців матриці: 4
for j in range(m): Згенерована матриця:
if a[i][j]<min_el: 47 50 90 69
min_el=a[i][j] 76 24 31 74
min_i=i 33 82 73 41
13 49 45 62
min_j=j
Мінімальний елемент: 13
print('Мінімальний елемент: ',min_el) Індекс мінімального елемента[3, 0]
print('Індекс мінімального елемента
[{}, {}]'.format(min_i,min_j))
Спосіб 2. Розв’язування з використаням методів списків.
min_col=list(map(min, a))
min_el=min(min_col)
min_i=min_col.index(min(min_col))
min_j=a[min_i].index(min_el)
print('Мінімальний елемент: ',min_el)
print('Індекс мінімального елемента[{},
{}]'.format(min_i,min_j))
Введіть кількість рядків матриці: 4
Введіть кількість стовпців матриці: 4
Згенерована матриця:
35 28 93 15
95 59 78 60
59 10 72 68
63 54 11 35
Мінімальний елемент: 10
Індекс мінімального елемента[2,1]
Спосіб 3. Пошук індексів для всіх мінімумів
Якщо ж матриця буде містити декілька рівних елементів, які і будуть мінімальними, то запропоновані
способи не підходять
. . . . .
min_col=list(map(min, a))
min_el=min(min_col)
print('Мінімальний елемент:',min_el)
for i in range(n):
for j in range(m): Введіть кількість рядків матриці: 4
Введіть кількість стовпців матриці: 4
if a[i][j]==min_el: Згенерована матриця:
print('Індекс 81 79 14 91
54 67 17 72
мінімального 62 81 66 61
елемента[{}, 42 77 59 79
Мінімальний елемент: 14
{}]'.format(i,j)) Індекс мінімального елемента[0, 2]
Приклад 2:
Створити матрицю A, що складається з N рядків і M стовпців і
заповнити його випадковими числами, знайти в ньому максимальний
елемент і його індекси.
мал. 3
Головна діагональ - це елементи A [0] [0], A [1] [1], ..., A [N-1] [N-1], тобто елементи, у яких номер рядка
дорівнює номеру стовпчика. Для перебору цих елементів досить одного циклу:
for i in range (N):
# Працюємо з A [i][i]
Приклад 3. Побудувати квадратну матрицю розмірності N = 4, у якій елементи на
головній діагоналі дорівнюватимуть одиниці, а інші елементи рівні нулю.
N=3
def printA( A ):
for i in range(N):
for j in range(N):
print( "{:2d}".format(A[i][j]), end=" " )
print()
A = [ [0]*N for i in range(N) ]
for i in range(N):
for j in range(N): Вивід програми:
A[i][j] = 0
printA( A )
print()
for i in range(N):
A[i][i]=1
printA( A )
За допомогою генератора легко виділити елементи головної діагоналі в
окремий масив: D = [A[i][i] for i in range (N)]
Приклад 4. A = [[1, 0, 0],
[0, 1, 0],
[0, 0, 1]]
D = [ A[i][i] for i in range(3)]
print(D)
Вивід:
[1, 1, 1] Елементи побічної діагоналі - це
A[0][N-1], A[1][N-2],...,A[N-1][0].
Зауважимо, що сума номерів рядка і стовпця
для кожного елемента дорівнює N - 1, тому
отримуємо такий цикл перебору:
for i in range (N):
# Працюємо з A [i] [N-1-i]
Приклад 5. Заповнити двовимірний масив випадковими числами і знайти суму
елементів, що лежать на побічної діагоналі.
from random import randint
N=int(input("Введіть N: "))
def printA( A ):
for row in A:
for x in row:
print( "{:4}".format(x), end=" " )
print()
A = [ [0]*N for i in range(N) ]
for i in range(N): Вивід програми:
for j in range(N):
A[i][j] = randint(0, 10) Введіть N: 4
printA( A )
s=0
for i in range(N):
s +=A[i][N-1-i]
print(s)
Для обробки всіх елементів на головній діагоналі і під нею (Мал. 4) потрібен
вкладений цикл: номер рядка буде змінюватися від 0 до N - 1,
а номер стовпця для кожного рядка i - від 0 до i:
for i in range(N):
for j in range(i+1):
# работаем с A[i][j]
Оператор:
A[0], A[3] = A[3], A[0]
переставляє рядки матриці з індексами 0 і 3.
Для того щоб створити копію рядка з індексом i, не можна робити так:
R = A [i] # це невірно!
тому що при цьому ми отримаємо нову посилання на існуючий рядок.
Замість цього потрібно створити копію в пам'яті за допомогою зрізу, що включає
всі елементи рядка:
R = A [i] [:]
Побудувати копію стовпчика з індексом j трохи складніше, так як матриця
розташована в пам'яті порядках. У цьому завданні зручно використовувати
генератор:
C = [row [j] for row in A]
У циклі перебираються всі рядки матриці A, вони по черзі потрапляють в змінну-
масив row.
Генератор вибирає з кожного рядка елемент з індексом j і складає список з цих
значень.
Завдання для розв'язання:
1. Напишіть програму, яка знаходить максимальний елемент на головній діагоналі квадратної матриці.
2. Напишіть програму, яка заповнює матрицю з N рядків і N стовпців нулями і одиницями так, що всі
елементи вище побічної діагоналі рівні нулю, а інші - одиниці.
3. Дана целочисленная квадратна матриця порядку n. Знайти номери рядків, все елементи якихнулі.
from random import random max_sum = 0
M = 10 col = 0
N = 5 for i in range(M):
a = [] s = 0
for i in range(N): for j in range(N):
b = [] s += a[j][i]
for j in range(M): print("%3d" % s, end='')
b.append(int(random()*11)) if s > max_sum:
print("%3d" % b[j], end='') max_sum = s
a.append(b) col = i
print() print()
print(col+1)
for i in range(M):
print(" --", end='')
print()
Питання для самоконтролю
1. Що означають дужки []?
2. Е змінна my_list ['a','b','c','d'].Яке значення виразу my_list[int('3' * 2)//11]?
3. У змінній list_a міститься список ['a', 'b', 'c', 'd’].
Яке значення виразу list_a[-1]?
4.У змінній list_b міститься список ['a', 'b', 'c', 'd’].
Яке значення виразу list_b[:2]?
5.У змінній list_c міститься список [2, 4, 6, 8, 10].
Як присвоїти значення 'zero' в якості третього елемента даного списку?
6.В чому різниця між функціями append() та insert(), передбаченими для списків?
7. Назвіть способи видалення значень із списку.
Python - це маленький початок великих справ.
Дякуємо!
mahalaschool.com.ua