Лекция · 4.6

Екі өлшемді массивте амалдар

Өткен сабақта матрица құруды және аралауды үйрендік. Енді сол матрицамен НАҚТЫ не істеуге болатынын қарастырамыз: жолдарды сұрыптау, керексіз қатарды өшіру, жаңа қатар қосу, әр бағанның қосындысын немесе әр жолдың көбейтіндісін табу. Бұлардың бәрі — Excel-дегі кесте амалдарының Python-дағы баламасы.

Негізгі параметрлер
Анықтама
len(a) — жол саны; len(a[i]) — i-ші жолдағы баған саны; a[i] — i-ші жолдың толық тізімі.
a = [[4, 9, 1], [6, 7, 1], [9, 1, 3]]
print(len(a))     # 3
print(len(a[1]))  # 3
print(a[2])      # [9, 1, 3]
⚠️
Ескерту: Python тізімдер тізімінде жолдар әртүрлі ұзындықта болуы мүмкін («тісшекті» тізім) — сондықтан len(a[i]) әр i үшін бөлек тексерілуі керек, оны len(a[0])-мен алмастыруға болмайды.
Қатар бойынша сұрыптау

Екі өлшемді массивті сұрыптау дегеніміз — оны қатар немесе баған бойынша реттеу. Бір өлшемді массивке арналған sorted() функциясы әр жолға жеке қолданылады:

a = [[29, 8, 7, 23, 15], [3, 25, 24, 2], [23, 22, 30, 15]]
for i in range(len(a)):
    a[i] = sorted(a[i])
print(a)
# [[7, 8, 15, 23, 29], [2, 3, 24, 25], [15, 22, 23, 30]]

Нәтижесінде матрицаның ӘР қатары өз алдына өсу ретімен реттеледі — қатарлардың бір-біріне қатысты орны өзгермейді.

Қатарды өшіру және кірістіру
Анықтама
Қатарды өшіру: a.remove(a[k]) немесе del a[k]. Қатарды кірістіру: a.insert(k, [жаңа қатар]).
a = [[25, 62, 48], [35, 35, 21], [41, 26, 34]]
k = 1
del a[k]
print(a)   # [[25, 62, 48], [41, 26, 34]] — 2-жол (индекс 1) өшті

a.insert(1, [0, 5, 11])
print(a)   # [[25, 62, 48], [0, 5, 11], [41, 26, 34]]
Баған қосындысы, жол көбейтіндісі

Жол бойынша есептеу мен баған бойынша есептеудің циклдер реті ерекшеленеді:

row, column = 2, 3
my_list = [[40, 2, 31], [6, 41, 49]]
sum_column = [0 for col in range(column)]
product_row = [1 for r in range(row)]

# Баған қосындысы: сыртқы цикл — баған, ішкі — жол
for i in range(column):
    for j in range(row):
        sum_column[i] += my_list[j][i]

# Жол көбейтіндісі: сыртқы цикл — жол, ішкі — баған
for i in range(row):
    for j in range(column):
        product_row[i] *= my_list[i][j]

print(sum_column)    # [46, 43, 80]
print(product_row)   # [2480, 12054]
📊
Есте сақтау: «баған» қосындысын тапқанда индекстер РЕТІ ауысады — сыртқы цикл баған нөмірін, ішкі цикл жол нөмірін өзгертеді. Бұл — Excel-де тік бағанды қосу мен жатық жолды көбейтудің Python баламасы.
🎯 ҰБТ байланысы
Матрицамен амалдар — Python блогының жоғары деңгейлі есептері.
1
sorted(a[i]) әр жолды жеке сұрыптайды, бүкіл матрицаны бірге емес.
2
del a[k] мен a.remove(a[k]) — екеуі де қатарды индексі бойынша өшіреді.
3
Баған қосындысында цикл реті ауысады — жиі жіберілетін қате.
4
a[i][j]=i*j секілді формулада индекстер 0-ден басталатынын ұмытпау.
Сабақ қорытындысы
  • len(a) — жол саны, len(a[i]) — i-ші жолдағы баған саны.
  • Қатар бойынша сұрыптау: a[i] = sorted(a[i]) әр жолға жеке.
  • Қатарды өшіру/кірістіру: del a[k], a.insert(k, [...]).
  • Баған қосындысы мен жол көбейтіндісі — циклдердің ретін ауыстыру арқылы есептеледі.