Массивҳои дученака
Бисёр маълумот табиатан ҳамчун ҷадвал навишта мешавад: майдони бозӣ, харита, ҷадвали дарсҳо, тасвир аз пикселҳо. Дар Python ҷадвалро ҳамчун рӯйхати рӯйхатҳо нигоҳ медоранд.
Рӯйхати рӯйхатҳо
table = [
[1, 2, 3],
[4, 5, 6],
]
print(table[0]) # [1, 2, 3] — сатри аввал
print(table[1][2]) # 6 — сатри 1, сутуни 2
print(len(table)) # 2 — шумораи сатрҳо
print(len(table[0])) # 3 — шумораи сутунҳо
Навишти table[i][j]: аввал сатри i-ро интихоб мекунем, баъд дар он элементи j-ро. Рақамгузорӣ, мисли ҳамеша, аз сифр.
Сохтани ҷадвал
Ҷадвали n × m аз сифрҳо бо генератор сохта мешавад:
n, m = 3, 4
grid = [[0] * m for _ in range(n)]
Ин тавр накун: [[0] * m] * n. Ин n истинод ба ҳамон як сатр аст — як хонаро иваз кунӣ, тамоми сутун иваз мешавад.
Хондани ҷадвал
Агар дар ҳар сатри вуруд ададҳо бо фосила бошанд:
n, m = map(int, input().split())
a = []
for _ in range(n):
row = list(map(int, input().split()))
a.append(row)
Ҳамин кӯтоҳтар: a = [list(map(int, input().split())) for _ in range(n)].
Агар сатри вуруд аломатҳо бе фосила бошад (харита, майдони бозӣ), онро ҳамчун сатр нигоҳ доштан қулай аст: grid = [input() for _ in range(n)], ва он гоҳ grid[i][j] — аломат. Сатрро аз рӯи индекс иваз кардан мумкин нест; агар хонаҳоро иваз кардан лозим бошад, онро ба рӯйхат табдил деҳ: list(input()).
Гузаштан аз ҷадвал
for i in range(n):
for j in range(m):
print(a[i][j], end=" ")
print()
Худи сатрҳоро ҳам гузаштан мумкин аст: for row in a: — он гоҳ row рӯйхати ададҳои сатр аст. Суммаи ҳамаи ададҳои ҷадвал: sum(sum(row) for row in a).
Чопи сатри ададҳо бо фосила — print(*row).
Сатрҳо ва сутунҳо
row_sums = [sum(row) for row in a] # суммаи ҳар сатр
col_sums = [sum(a[i][j] for i in range(n)) for j in range(m)] # ҳар сутун
Диагонали асосии ҷадвали квадратӣ — хонаҳои a[i][i], диагонали паҳлӯӣ — a[i][n - 1 - i].
Ҳамсояҳои хона
Дар бисёр масъалаҳо бо тӯрҳо ба ҳамсояҳои хонаи (i, j) нигоҳ кардан лозим аст. Ҷобаҷокуниҳоро номбар кардан қулай аст:
# чор ҳамсоя аз рӯи тарафҳо
for di, dj in ((-1, 0), (1, 0), (0, -1), (0, 1)):
ni, nj = i + di, j + dj
if 0 <= ni < n and 0 <= nj < m:
print("ҳамсоя", ni, nj)
Санҷиши 0 <= ni < n and 0 <= nj < m ҳатмист. Бе он дар канори майдон индекси -1 ҳосил мешавад, ва дар Python a[-1] — хато нест, балки элементи охирин аст. Барнома хомӯшона ҳамсояро аз канори муқобил ҳисоб мекунад, ва ҷавоб нодуруст мешавад.
Самтҳои ҳаракат
Вақте ки дар ҷадвал «роҳ мераванд» (робот, мор, гузариш), самтҳоро дар рӯйхатҳо нигоҳ медоранд:
di = [-1, 0, 1, 0] # боло, рост, поён, чап
dj = [0, 1, 0, -1]
d = 1 # ба рост нигоҳ мекунем
d = (d + 1) % 4 # гардиш бо самти ақрабаки соат → поён
Бақияи % 4 самтҳоро ба ҳалқа мепайвандад: пас аз «чап» боз «боло».
Хулоса
- ҷадвал — рӯйхати рӯйхатҳо,
a[i][j]— сатриi, сутуниj; - тавассути
[[0] * m for _ in range(n)]соз, на тавассути* n; - сатр ба сатр хон: ададҳо тавассути
map, тӯрҳои аломатӣ — ҳамчун сатр; - ҳангоми муроҷиат ба ҳамсояҳо сарҳадҳоро санҷ:
a[-1]хато намедиҳад; - самтҳоро ҳамчун рӯйхатҳои ҷобаҷокунӣ нигоҳ доштан қулай аст.