Python для начинающих. Урок 10: Многомерные массивы.

preview_player
Показать описание


Рекомендации по теме
Комментарии
Автор

Ехал список через список, видит список - список список. Сунул список список в список: список список список список.

Robozveria
Автор

Я так долго ждал курсы по питону, что стал джуном php )

krbftnw
Автор

rows = []
columns = []

def matrix(n, m):
i = 0
j = 0
while i < m:
rows.append(columns)
i += 1
while j < n:
columns.append(0)
j += 1
for a in rows:
for b in a:
print(b, end=' ')
print()

matrix(10, 10)

vikkat
Автор

Задачи хорошие, и бОльшая часть материала для их решения и правда была дана ранее, но тем не менее реальным новичкам решить их самостоятельно нереально. Сразу оговорюсь, что помощь гугла - уже априори не является "самостоятельным решением", на мой взгляд.
Может я просто тупая такая и в моей голове что то не укладывается, но мне кажется вы не даете полной картины. Вы отлично объясняете, все понятно пока вы говорите.
Но когда дело доходит до задач, то оказывается, что знаний не достаточно. Просто потому, что нет полной картины в голове новичка.
Вот лично мне казалось в предыдущих уроках, что я полностью поняла синтаксис и смысл функции append. Я запомнила, что добавить к списку элемент это a.append(0), например. Но массив это другая структура, и синтаксис немного иной (с точки зрения новичка).
Для меня
a.append(0) (добавление элемента к обычному списку) и
arr.append(inter_arr) (добавление целой строки к массиву)
это разные выражения.
Конечно посидев пару минут глядя в это выражение и осознав его, ты понимаешь, что "да, это ведь логично". Но посмотрев ваше решение я для себя поняла, что не додумалась бы до него наверное и через неделю.
Во второй задаче выражение (len(arr) // 2) - откуда вообще взялось? Как до этого мог додуматься человек, впервые столкнувшийся с языком программирования? Это абсолютно новая возможность языка, о которой не упоминалось ранее ни в коем виде.
Понятно, что вы пытаетесь приучать людей думать, это круто. Но, мне кажется, что надо шире показывать возможности новых функций. Показывать, что "вот со строками это выглядит так, а с массивами вот так, но о массивах поговорим позже". И тогда дойдя до массива, у новичка в голове будет инфа, что вот когда то вы об этом упоминали, можно посмотреть в более раннем уроке и применить на практике. Ну или хотя бы давать какие то подсказки о том, какую информацию можно поискать самостоятельно, чтобы дойти до решения.
Новички понятия не имеют о том, какими возможностями обладает язык. К примеру, мне не понятно почему нет встроенной функции печати массива в виде таблицы без запятых и скобок, почему такую функцию надо писать самому? Это же совершенно очевидная и базовая функция, такая же как обычный print. И я полагаю если бы она существовала, вы бы ее показали. И так далее, в общем)
Решения ваших задач часто подразумевают существование у новичка некой интуиции на наличие тех или иных возможностей языка, но у нас ее нет :)
В общем, надеюсь мой посыл правильно понят и, возможно, поможет вам в будущем строить свои уроки еще более доступно для совсем зеленых)

marinaagafonova
Автор

Хочу выразить вам огромную, просто ОГРОМНУЮ благодарность за то, что вы всё это бесплатно сделали для и нас. Очень доходчиво.
Пару месяцев назад, когда я только залез в IT, мне, что б понять и полностью освоить тему нужна была неделя(и то, если тема эта не сложная), и поэтому я даже не мог понять то, что вы объясняете, хотя сейчас, когда я почти закончил курс Питон для новичков, то смотрю новый материал у вас для себя с огромным кайфом !)
Спасибо вам !!!

username
Автор

Решение на Задание №1
def create_2d_arr(n, m):
my_arr = []
my_arr = [[0] * m for i in range(n)]
return my_arr

Решение на Задание №2
def mirror_arr(mas):
for i in mas:
for j in range(len(i)//2):
i[j], i[len(i)-j-1] = i[len(i)-j-1], i[j]
return mas

Огромная благодарность автору канала за труды!

andreykuprin
Автор

спасибо большое, учусь, пересматриваю по несколько раз, всё доступно и понятно

функцию с разворотом по фану сделал)
def side_reflect(some_list):
'''функция для чтения списка в обратном порядке'''
some_list = some_list[::-1]
return some_list


def
'''функция для отзеркаливания матрицы по вертикали'''
for array in some_array:
array = side_reflect(array)
for element in array:
print(element, end=' ')
print()
return some_array

phoenixegoist
Автор

Спасибо за твои старание. Очень интересно. Ждем продолжения. С наступающим тебя бро

HIPHOPALIVE
Автор

вы мне очень помогаете готовиться к урокам информатики, спасибо большое!мастер своего дела.

pozzitifosha
Автор

Задача 2:
def mirror(arr):
for g in range(len(arr)):
for i in range(len(arr[0]) // 2):
arr[g][i], arr[g][-i - 1] = arr[g][-i - 1], arr[g][i]
return arr

ПС. Спасибо за классные уроки и задачки!

ilnur_nambavan
Автор

Я последнюю задачу вот так решил:
def reverse_arr(x):
for i in range(len(x)):
x[i].sort(reverse=True)

return matrix_print2(x)

matrix_print2 (x) - функция из начала этого же урока для вывода шахматкой. все работает также. Вариант с решением через целочисленное деление не придумал бы и за неделю. А метод .sort запомнил просто когда смотрел в документации к питону основные фичи списков.
Спасибо за урок!

hlibyeletskyi
Автор

Спасибо за отличный урок! Долго мучилась, но идея у меня была более простая - распечатать вложенные списки в обратном порядке. Признаюсь честно, что скомпилировать мысль получилось только после просмотра вашего решения.
di = [[1, 2, 8, 9], [4, 8, 6, 5], [7, 8, 9, 3]]
# исходный список

def mass_di(m):
# вложенная функция
return m[::-1]

def my_mirr(di):
# рабочая функция
for m in di:
mass_di(m)

pr_m(di)
# вывод исходной матрицы в печать

print()
# пробел для красоты
my_mirr(di)
# запускаем функцию

pr_m(di) # распечатаем, что вышло в итоге

nadyamoscow
Автор

Последнюю задачу сначала решил так:

def mirror_swap(array2d):
for arr in array2d:
arr.reverse()
return array2d

Потом решил, что такое решение не подходит для качественного усвоения материала. Подумал... и пришел к такому решению:

def mirror_swap(array2d):

for arr in array2d:
for el in range(len(arr) // 2):
arr[el], arr[-1-el] = arr[-1-el], arr[el]
return array2d

Каково было мое удивление, когда я впервые оказался близок к вашему алгоритму! Только я несколько иначе вычисляю индекс второго элемента в паре. Тут я вспомнил ваш урок по спискам, где вы говорили, что запись list[-1] соответствует последнему элементу в списке!

Огромное вам

dzuqsdb
Автор

Спасибо за ваш труд. Все очень понятно на простом Русском языке. Без лишней воды, туману и слов паразитов "эээээ", "нууууу", подковы гну и т. д. Слава Богу я что то начинаю понимать. Вы молодец!!! Респект!!! 🎉🎉🎉 делайте свое дело никого не слушайте. Решение одной и той же задачи может быть разным способом. Цель достигнута, код рабочий в чем проблема???

Flaxet
Автор

555 лайков под этим видео, круто. Очень хорошо объясняешь. Долго в инете искал тутор по двумерным массивам, нигде нормально не объясняли. Спасибо, удачи!

NeoWaIker
Автор

arr_2d = [['Спасибо'], [alishev], [за помощь!]]
def print_matrix(arr_2d):
for arr in arr_2d:
for el in arr:
print(el, end = ' ')
print()
print_matrix(arr_2d)

Вывод:

Спасибо
alishev
за помощь!

onegamer
Автор

Первое задание сделал, создав сначала список из нулей, а потом добавляя его в основной.
Второе, кстати, без создания вспомогательной функции. Создал переменную для перебора списка с конца.

№1
def create_2d_arr (m, n):
list_m = []
list_n = []
for k1 in range (n):
list_n.append (0) # создаём вложенный список, добавляя нули
for k2 in range (m):
list_m.append (list_n) # добавляем вложенный список в основной нужное количество раз
return (list_m)

№2

def create_1 (m1, n1): # создаём матрицу из m1 строк и n1 столбцов
cr1 = 0
arr_1 = []
for i1 in range (m1):
arr_2 = []
for j1 in range (n1):
arr_2.append (cr1)
cr1 += 1
arr_1.append (arr_2)
return (arr_1)

# Это, по сути, оформление условия задачи. Функция создаёт матрицы нужных размеров с возрастающими по порядку числами (последнее для упрощения восприятия)

# Теперь решение:

def create_2 (m1, n1): # зеркально отражаем слева направо матрицу, созданную в create_1

arr_1 = create_1 (m1, n1)

for i2 in range (m1):

t2 = -1 # создали переменную, чтобы идти по спискам в обратном направлении
for j2 in range (n1):
if j2*2 < len (arr_1[i2]): # условие, чтобы не перейти середину матрицы и не отразить её обратно
arr_1 [i2][j2], arr_1 [i2][t2] = arr_1 [i2][t2], arr_1 [i2][j2] # обмен элементами
t2 -= 1

return (arr_1)

# Результат
# Функцию print_matrix не вывожу - она взята из урока

m1, n1 = 3, 6

print_matrix (create_1 (m1, n1))
print ()
print_matrix (create_2 (m1, n1))

0 1 2 3 4 5
6 7 8 9 10 11
12 13 14 15 16 17

5 4 3 2 1 0
11 10 9 8 7 6
17 16 15 14 13 12

# Работает при различных размерах матрицы.

Спасибо за урок!

mtvnpro
Автор

Хорошие курсы. Но для бегиннеров тяжело. Это скажем так для настойчивых бегиннеров) А так да, пили дальше! Единственно аудитория узкая. Лайк и прочее)
и зачем подфункция если работает прямой обмен a, b = b, a?

vladimirefimov
Автор

комментарий просто для рейтинга) комбинация двух задач - сначала создается список с заданными размерами, а потом он отзеркаливается
def createarray (x, y):
zeroarray=[]
for t in range (x):
tempo=[]
for length in range(y):
tempo.append(length)
zeroarray.append(tempo)
return zeroarray
arr1=createarray(5, 5)
print("source matrix")
for m in range(len(arr1)):
print (arr1[m])

for i in range(len(arr1)):
for j in range(len(arr1)//2):
temp=len(arr1)-j-1
arr1[i][j], arr1[i][temp]=arr1[i][temp], arr1[i][j]
print("after mirroring")
for m in range(len(arr1)):
print (arr1[m])

alexvernua
Автор

Жирнейший like и подписка. Для меня лучший видеурок по многомерным массивам и заодно циклам.

qazaqbalasy