🫵 Теория без практики - ничто, поэтому 👇 🐍 stepik.org/course/63085/promo 👉 специально для тебя создал бесплатный топовый курс по Python 👉 В нем тебя ждет: 📗 более 400 практических заданий на программирование 📗 более 250 тестовых заданий на проверку материала 📗 десятки часов видеоматерилов по теории 📗 видеоразборы решения заданий 📗 текстовые материалы по урокам, примеры кода 📗 доступ к закрытому чату с дружественной обстановкой 📗 сертификат в случае успешного прохождения курса
@@АндрейБудкин-ф5щ ну смотря что считать джуном , на работу еще не берут, но какйнибудь сайт или скрипт небольшой написать могу. Сейчас на джуна требования как на синьера
Спасибо огромное! Прочитала разные объяснения на форумах про вложенные списки, но ваше самое понятное и доступное:) Рада быть спонсором вашего канала. У вас качественный контент.
спасибо за уроки. Пересмотрела много видео про вложенные списки, поняла наконец, по вашему объяснению. Наглядно и понятно! Спасибо огромное. 2 недели изучаю, но застряла на вложенных циклах, как-то трудно было представить, а тут всеп понятно. Благодарю!
13:35 заполнение вложенного списка с клавиатуры. Используется дополнительный временный список, для хранения элементов одной строки. А потом за один раз всю эту строку добавляем в основной список. Очень понятно видео, спасибо.
Большое спасибо, ваша подача + нормальное объяснение дает возможность понять что такое вложенные списки и как с ними работать! По моему мнению это видео одно из лучших для начального ознакомления со вложенностями!
Транспонирование 1: a = [] b = [] n = int(input('n: ')) for i in range(n): a.append(list(map(int, input(' ').split()))) for i in range(n): b.append([0]*n) for i in range(n): for j in range(n): b[j][i] = a[i][j] for i in b: print(i)
Огромное спасибо за видео. Вопрос. 12:00. range(3) и range(4). Как они понимают что есть столбец а что есть строка. Само определяет где есть такая длина? Спасибо
Вложенные списки - это строки, которые в видео индексируются [ i ]. А из-за того, что они являются элементами главного списка, то и индексируются в первую очередь. Столбцы составляются из элементов вложенных списков (строк) с одинаковыми индексами. Поэтому, т.к. столбцы состоят из элементов вложенных списков, то и индексируются они вторыми. В видео использовали индексацию столбцов [ j ]. Вообще, использовать "i" и "j" в циклах - это своеобразное негласное правило в программировании. Думаю, ответ исчерпывающий :)
@@serhiisvyst4489 Не верный ответ. Просто после циклов он пишет print a[i][j]. Соответственно и выводится так - i первый индекс - номер строки, j - второй индекс - номер столбца. А как вы эти переменные назовёте это не важно. Важно что вы запросите на печать
гайсы, я тут немного экспериментировал во время видео, и обнаружил что если вместо новой инициализации списка b = [ ] в цикле применить b.clear() то результат будет совершенно иной. Это взорвало мне мозг! Короче получается что после clear() конечный список 'a' хранит в себе сука ссылки на ту же память что и 'b', просто вывод дважды один и тот же список! это значит что если менять содержимое 'b' то и содержимое 'a' меняется. НО! Если применить инициализацию b = [ ] то все работает как надо, и в конечном списке 'a' будут копии данных из 'b' каждой итерации внутреннего цикла! a = [ ] b = [ ] l = int(input()) # line c = int(input()) # column for i in range(l): b.clear() < ---- дело все в этом. у автора тут b = [ ] for j in range(c): b.append(int(input())) a.append(b) for i in a: print(i) Входные данные: 2 2 3 4 6 7 Результат: [6, 7] # это текущее состояние b [6, 7] # выходит что а просто ссылается на ту же память применение clear() >>> a = [] >>> b = [] >>> a = [1, 1, 1, 1] >>> b [] >>> a [1, 1, 1, 1] >>> b.append(a) >>> b [[1, 1, 1, 1]] >>> a.clear() # воздействуем на a >>> b [[]] # и b изменился тоже! т.е. b ссылается на ту же память что и а >>> a [] >>> >>> применение инициализации >>> >>> a = [] >>> b = [] >>> a = [1, 1, 1, 1] >>> b.append(a) >>> b [[1, 1, 1, 1]] >>> a [1, 1, 1, 1] >>> a = [] # а вот после такого воздействия на а, дающего такой же результат что и a.clear() >>> a
[] >>> b # для b выделяется свою память и b не реагирует на изменения в а [[1, 1, 1, 1]]
Транспонирование - 1: n = int(input()) a = [] for i in range(n): a.append(list(map(int, input().split()))) for i in range(len(a)): for j in range(len(a)): print(a[j][i], end=' ') print()
Транспонирование - 2: n = int(input()) a = [] for i in range(n): a.append(list(map(int, input().split()))) for i in range(len(a)): for j in range(len(a)): print(a[n - 1 - j][n - 1 - i], end=' ') print()
Транспонирование - 3: n ,m = map(int, input().split()) a = [] for i in range(n): a.append(list(map(int, input().split()))) for i in range(n): for j in range(m - 1, -1, -1): print(a[i][j], end=' ') print()
Красивая матрица: a = [] for i in range(5): a.append(list(map(int, input().split()))) for i in range(5): for j in range(5): if a[i][j] == 1: m = max(i, 2) - min(i, 2) + max(j, 2) - min(j, 2) print(m)
Транспонирование - 4: n, m = map(int, input().split()) a = [] for i in range(n): a.append(list(map(int, input().split()))) for i in range(n): for j in range(m): print(a[abs(i - n + 1)][j], end=' ') print()
Сумма главной диагонали: n = int(input()) a = [] s = 0 for i in range(n): a.append(list(map(int, input().split()))) for i in range(n): for j in range(n): if i == j: s += a[i][j] print(s)
То, как я решил задачу "Спираль" /---------------------------------- n = int(input()) a = [] for i in range(n): a.append([0] * n) i = 1 aX = 0 aY = 0 direction = 1 # 1 right # 2 down # 3 left # 4 up while i < n*n: while direction == 1: if aY < n - 1 and a[aX][aY + 1] == 0: a[aX][aY] = i aY += 1 i += 1 else: direction = 2 while direction == 2: if aX < n - 1 and a[aX + 1][aY] == 0: a[aX][aY] = i aX += 1 i += 1 else: direction = 3 while direction == 3: if aY > 0 and a[aX][aY - 1] == 0: a[aX][aY] = i aY -= 1 i += 1 else: direction = 4 while direction == 4: if aX > 0 and a[aX - 1][aY] == 0: a[aX][aY] = i aX -= 1 i += 1 else: direction = 1 a[aX][aY] = i for i in range(n): for j in range(n): print(a[i][j], end=' ') print()
Самое доступное объяснение про матрицы. Но как вижу реальную задачу на создание матриц без определенного количества строк и столбцов, то у меня ступор. То есть вводится произвольное число значений и после этого из этого числа надо создать прямоугольную матрицу!
Сумма матриц: n, m = map(int, input(' ').split()) matrix1 = [] matrix2 = [] resmatrix = [] for i in range(n): matrix1.append(list(map(int, input(' ').split()))) print() for i in range(n): matrix2.append(list(map(int, input(' ').split()))) for i in range(n): resmatrix.append([0]*m) for i in range(n): for j in range(m): resmatrix[i][j] = matrix1[i][j] + matrix2[i][j] print(resmatrix)
Товарищи, подскажите, просмотрев все видео, кроме спонсорских можно на основании полученных знаний поменять строки местами? Не могу решить задачу красивая матрица. Ответ знаю, что максимум за 4 раза можно в центр поместить однерку при условии, что она в одном из углов. А как менять строки в ту или другую сторону не могу додуматься. Кода не жду, хотя бы направление куда двигаться исходя из пройденных курсов без всяких matrix и пр. Того чего ещё не было. Дело принципа. Мысль такая ещё, что строка это индекс i списка и соответственно поменять строки это поменять значения под данным индексом. Т.е. я должен обойти строку идентифицировать в этой строке 1, если она есть то поменять следующую строку с текущей ( если в индексах то а[i] на а[i+1]) Пока пишу мысль развивается...может нужен промежуточный список, куда складывать данные...
Замечание. Про обратный обход. Ведь можно ренжировать в обратном порядке, тоесть: for i in reversed(range(3)) for j in reversed(range(3)) Везде 3, т.к копировал у себя. Опять же, так я думаю, несколько проще, просто дописать reversed()
Эхэхэх из уважения к потраченным деньгам не буду называть платный курс, который дз все от сюда взял (ну или очень похоже), а также вообще эту тему не раскрыл. Четко как чичётка спасибо автору.
подскажите пожалуйста. на степике решил задачу состязания. решил пошагово. сначала ввел количество n и m, потом заполнил матрицу путем добавления потом прошел по значениям и суммировал результаты каждого и вывел максимальное значение. но посмотрев решения других участников обучения я не совсем понял некоторые моменты и вспомнил что такие моменты уже были в предыдущих задачах. вот строка в которой L присваевается прям сразу пол задачи n, m = map(int, input().split()) L = [[int(i) for i in input().split()] for i in range(n)] S = [sum(i) for i in L] print(max(S), S.index(max(S)), sep=' ') не могли бы вы пошагово расписать происходящее в этой строке или в этой где a присваевается решение в одну строку. и зачем в конце первой строки стоит список из одного нуля n = int(input().split()[0]) a = [sum(list(map(int, input().split()))) for _ in range(n)] print(max(a), a.index(max(a)), sep=' ') честно говоря я почувствовал себя умственно хуже чем чувствовал до этого потому что ребята находящиеся на том же месте в обучении что и я сделали что то, что мне не совсем понятно
Блин ... со спиралью реально жесть ... так и не додумался. И еще непонятки с таблицой умножения ... вроде как решил, для не очень больших отлично работает, но как быть с огромными таблицами? Сайт бракует через превышение лимита по времени ... ну не удивительно ... если таблица 100000 х 100000 и найти там числа 1000000000. Как то тут наверное метод с вложеными списками не очень подходит.
В задаче Таблица умножения вложенные списки использовал для хранения делителей числа X. А делители искал по аналогии с уроком 21 (egoroffartem.pythonanywhere.com/course/python/21) Вот такое решение получилось: n, x = map(int, input().split()) i = 1 a = [] while i ** 2
Артем, подскажите, пожалуйста, почему при выводе строк в обратном порядке, в цикле for i range(2, -1, -1) вы пишите вторым элементом -1, если нужен обход но ноля. (откуда идем, до куда идем, с каким шагом), не понял почему там -1. Спасибо!
Может кто-нибудь помочь с кодом задания Состязания - 3? Код проходит только 8 проверок, но я ни как не могу понять какие такие могут быть входные данные, чтобы результат был не верным. Код ниже: n,m=map(int,input().split()) a=[] b=[] for i in range(n): a.append(list(map(int, input().split()))) b.append(sum(a[i])) if i==0: maxM = i elif max(a[i]) > max(a[maxM]): maxM = i elif max(a[i]) == max(a[maxM]): maxM = b.index(max(b)) print(maxM)
Решил сам, код: n,m=map(int,input().split()) a=[] b=[] maxM=0 maxI=0 for i in range(n): a.append(list(map(int, input().split()))) b.append(sum(a[i])) for j in range(m): if a[i][j]>maxM: maxM=a[i][j] for i in range(n): if maxM in a[i]: if maxI
Транспонирование - 1 n = 3 matrix = [[1, 3, 5], [2, 4, 6], [7, 8, 9]] trans_matrix = [] for i in range(n): trans_matrix.append([0] * n) for i in range(n): for j in range(n): trans_matrix[j][i] = matrix[i][j] for i in range(len(trans_matrix)): print(*trans_matrix[i]) код не принимает сайт,вроде все верно
Артем, могли бы вы подсказать с задачей acmp.ru/asp/do/index.asp?main=task&id_course=1&id_section=8&id_topic=120&id_problem=746? Не совсем понятно, как считывать данные, когда между матрицами пробел.
Спасибо за материал. Очень подробно и понятно! Автор молодчина. Только почему в конце матрица не сработала, когда число строк стало 5?. Первая цифра 3 (индекс 0,0), а должна быть 10(а она с индексом 0,1 уже получается). Или я что то не понял?
Могу дать совет. Напишите такую же программу в PyCharm и с помощью команды Debug понаблюдайте за каждым действием программы. Тогда все становится намного понятнее
Легкий способ научиться рисовать сову. 1. Рисуем круг - это будет голова совы. 2. Рисуем овал впритык к кругу - это будет тело совы. 3. Рисуем остальную сову. Примерно так я понимаю это видео)))
Смотря что вы хотите вывести... Если только 1 элемент из списка, то можно использовать индексацию, т.к. списки это позволяют. Например: A = [ 1, 2, 3, 56, 3.7, "Hello" ] print( A[ 0 ] , A[ -1 ] ) # Вывод: >>> 1 Hello Индекс [ -1 ] означает, что берётся последний элемент итрерируемого объекта (списка). Ну, а т.к. в Python отсчёт идет не с 1, а с 0, то чтобы вывести первый элемент, используем [ 0 ]. Если хотите вывести некоторую часть / отрывок из списка, то используйте "вырезку". Это долго объяснять, но тема очень простая, и легко найти подходящий видеоурок. Пример вырезки: B = [ ' q ', 1 , 728.4 , ' python ' ] print( B[ 1 : 3 ] ) # Вывод: >>> [ 1 , 728.4 ] Как видим, в вырезках второй элемент, который определяет до какого элемента вырезать, не включается в саму вырезку.
Разберите, пожалуйста для спонсоров эту задачу: Вам нужно посчитать сумму элементов двумерного квадратного (NxN) списка, которые расположены на главной диагонали. Программа сперва принимает на вход число N (N
Подскажите, пожалуйста, как в задаче "Симпатичный узор" так написать код, чтобы выдавало одно значение "yes" при симпатичном узоре? a = [] for i in range(4): b = [] for j in range(4): b.append(input()) a.append(b) for i in a: print(i) for i in range(4): for j in range(4): if a[i][j] == a[i][j+1] and a[i][j] == a[i+1][j+1] and a[i][j] == a[i+1][j]: print("yes") else: print("no") Если ставлю счетчик, чтобы выдало yes по условию, то программа выдает ошибку: "IndexError: list index out of range". На break же программа не реагирует продолжая заход на следующую строку по циклу.
Изначально задать переменной значение ответа, которое будет изменяться в случае выполнения условной конструкции. flag = 'Yes' for i in range(len(m)-1): for j in range(len(m[i])-1): if (m[ i ][ j ] == m[ i ][ j+1 ] == m[ i+1 ][ j ] == m[ i+1 ][ j+1 ]): flag = 'No' print(flag) Чтобы избежать ошибки "list index out of range", т.е выхода за пределы списка, перебираем значения, не включая последнее как по строкам, так и по столбцам.
Здравствуйте! Возможно мне не ответят, но информацию все равно найти не могу. Объясните пожалуйста, как без ввода значений элементов I и j, через range , функция понимает что I это строка, а j это столбец. И при перемене местами( где j мы ставим в первом цикле, а I в вложенном) python все равно считывает j как столбец, а не строку? При этом если ввести квадратную матрицу, функция тоже понимает где I это строка, j столбец. Спасибо за уроки.
Когда мы чисто механически меняем местами "for i in... " на "for j in..." как программа понимает, что мы ей говорим идти по столбцам, а не по строкам? У меня этот вопрос возник, сразу по ходу урока, потом пытался найти ответ, но не нашел. В примере количество элементов в строке и столбцах разное и возможно поэтому питон понимает по какому ренжу идти. А если будет одинаковое??? Две совершенно одинаковые строчки поменяли местами и что???
Так понял, смотрите для простоты понимания давайте уйдём от абстрактных i j и представим это как row - строка col - столбец представим матрицу 5 на 5, так вот в цикле for row in range(5) for col in range(5) a[row][col] == ... тут первый цикл row и поэтому пока не пройдёт весь цикл col значение row будет 0 (т.е проходим по первой строке) и только после того как мы пройдём по всем столбцам нулевой строки, значение row станет 1. А в цикле: for col in range(5) for row in range(5) a[row][col] == ... col первый цикл и пока мы не пройдём по всем строкам нулевого(фактически первого) cтолбца значение col будет равно 0, после прохода по всем рядам col станет 1 и опять бегаем по строкам. Стоит обратить внимание на то что при когда мы меняем циклы местами мы не меняем местами переменные a[row][col] на a[col][row] т.к это не имеет смысла и сводит все перемены циклов на нет. Надеюсь хоть одному человеку мой комментарий поможет.
Подскажите в чем ошибка. Сумма матриц. a,b=map(int,input().split()) k=[] c=[] for i in range(a): k.append(list(map(int,input().split()))) print() for i in range(a): c.append(list(map(int,input().split()))) for i in range(a): for j in range(b): s=k[i][j]+c[i][j] print(s,end=" ") print()
Можно через цикл/ генератор списков преобразовать каждый подмассив основного массива. array = [ [1,2,3], [4,5,6], [7,8,9] ] new_array = [ ] for subarray in array: new_array.append(tuple(subarray)) / new_array = [tuple(subarray) for subarray in array]
Здравствуйте, я не очень хорошо понял как реализовать 2-ю задачу, где необходимо обойти элементы матрицы сверху вниз слева направо, а не понимаю как это сделать если у нас количество столбцов = количеству строк. Помогите пожалуйста. n = int(input()) a = [] for i in range(n): a.append(list(map(int, input().split()))) for i in range(n): for j in range(n): print(a[i][j],end=' ') print() вот до чего только додумался, а вот как поменять не понимаю (
ЗДравствуйте, не могу сообразить как оформить сумму столбцов, как должно работать мысли есть а вот как в код преобразовать не знаю (. Будьте добры спасите несчастного, битый час сижу n, m = map(int, input().split()) a = [] for i in range(n): a.append(list(map(int, input().split()))) for i in range(n): print(sum(a[i]), end=' ') print() for i in range(m): for j in range(n): .... *Задан целочисленный двумерный массив, состоящий из N строк и M столбцов. Требуется вычислить сумму элементов в каждой строке и в каждом столбце.
зачем в обходе по индексам указывать точное число? Это плохая практика, конечно здесь мы знаем какой длинны массив и легко просто вписать в рендж, а если массив огромный? Считать будем? Или все-таки используем лучше range(len(a))? Думаю ответ очевиден) Что еще лучше, почему так сразу не делать?: ------------------------------ for i in range(len(arr)): for j in range(len(arr[i])): print(arr[i][j], end=" ") print() ------------------------------- Я может не прав, я писал раньше на C# и поэтому все это вводит слегка в ступор, так как там проще работать с индексами. Прошу если что пояснить/объяснить
как-то неправильно у меня отображаются списки, не понял, в чём проблема(в строчку): sun9-58.userapi.com/impg/VSPZK6fw40gJ5hoUHo-iENO6qWk0sm1du4rkkQ/eGTdL-W3_3c.jpg?size=1280x701&quality=96&sign=69291d262611180cb8844da261f95454&type=album
🫵 Теория без практики - ничто, поэтому 👇
🐍 stepik.org/course/63085/promo
👉 специально для тебя создал бесплатный топовый курс по Python
👉 В нем тебя ждет:
📗 более 400 практических заданий на программирование
📗 более 250 тестовых заданий на проверку материала
📗 десятки часов видеоматерилов по теории
📗 видеоразборы решения заданий
📗 текстовые материалы по урокам, примеры кода
📗 доступ к закрытому чату с дружественной обстановкой
📗 сертификат в случае успешного прохождения курса
Спасибо за видео . учу питон уже месяц . благодаря вам стал ощущать себя намного тупее чем раньше )
Так тебе помогло видео или нет?
хаахахахахахахаха
@@ZaeBalAndreevych да , лучший канал
@@СаняПушкин-ц4о и как уже успехи в изучении ? Стал джуном ?
@@АндрейБудкин-ф5щ ну смотря что считать джуном , на работу еще не берут, но какйнибудь сайт или скрипт небольшой написать могу. Сейчас на джуна требования как на синьера
Спасибо огромное! Прочитала разные объяснения на форумах про вложенные списки, но ваше самое понятное и доступное:) Рада быть спонсором вашего канала. У вас качественный контент.
спасибо, очень приятно)
спасибо за уроки. Пересмотрела много видео про вложенные списки, поняла наконец, по вашему объяснению. Наглядно и понятно! Спасибо огромное. 2 недели изучаю, но застряла на вложенных циклах, как-то трудно было представить, а тут всеп понятно. Благодарю!
Такая же ситуация, застрял)) Материал очень хорошо изложен, спасибо автору.
Спасибо за урок, отличный материал и подача. Без суеты, без спешки и все понятно. Супер
13:35 заполнение вложенного списка с клавиатуры.
Используется дополнительный временный список, для хранения элементов одной строки. А потом за один раз всю эту строку добавляем в основной список.
Очень понятно видео, спасибо.
коротко и без воды. супер. Спасибо за труд.
Артем, СПАСИБО огроменное за проделанную работу! Только благодаря Вашим доходчивым словам Пайтон дается легко и просто :)
нет
Ну не легко, но намного проще чем могло бы быть
Эта тема про матрицы сложнее даже, чем функции))))
А как насчёт dataframe-ов?)
Ну как спустя 4 года? Освоили ?
Первое просмотренное видео на канале. После 5 минут захотелось поставить лайк. Грамотное объяснение и сопровождение!
Большое спасибо, ваша подача + нормальное объяснение дает возможность понять что такое вложенные списки и как с ними работать! По моему мнению это видео одно из лучших для начального ознакомления со вложенностями!
Разбор задач
Транспонирование 2 - th-cam.com/video/QfqcqeTrSR0/w-d-xo.html
Сумма главной диагонали th-cam.com/video/Gyvvs9Ltr9Q/w-d-xo.html
Симметричная ли матрица - th-cam.com/video/JEu4oF3l7w4/w-d-xo.html
Красивая матрица - th-cam.com/video/6TXtHdiyyCo/w-d-xo.html
Сумма матриц - th-cam.com/video/pbQ4eu_9C3s/w-d-xo.html
Подарок для Лены - th-cam.com/video/YSqZmLr9uss/w-d-xo.html
Спираль th-cam.com/video/mHTMe_Q4-Xo/w-d-xo.html
Морской бой 2 th-cam.com/video/BA9zmfQyfdo/w-d-xo.html
Состязания-3 th-cam.com/video/_tzOEBBFkJs/w-d-xo.html
Вам следует закрепить этот комментарий
Самые подробные видео из всех, что встречал на ютубе. Спасибо вам большое
очень доволен этим уроком, очень хорошо объясняете, удачи вам во всех начинаниях!
Огромное спасибо вам за ваши уроки! Благодаря вам я начал понимать в языке и теперь занимаюсь по вашим видео
Благодаря тебе я выучил питон и теперь легко даются другие языки. Спасибо за это огромное
Здравствуйте. За сколько вы выучили?
@@barbi8271 за год не постоянных тренировок в этой сфере
@@ArtLvl-y1o я уже все. Ничего не хочу
@@barbi8271 Не сдавайся! Мы тупенькие, но упорные! В этом нужно просто постоянно вариться!
@@barbi8271 Не повторяй моих ошибок.Лучше не забрасыв учёбу
Отличный видеоурок, очень хорошее объяснение. Не понимал как работать с диагональю, а теперь есть хотя бы представление. Спасибо
спасибо за урок ! это уже какой то новый уровень! буду осваивать! Спасибо за ваши труды!
Бро ты лучшее всех!!! Такому материала не ожидать. Молодец
Транспонирование 1:
a = []
b = []
n = int(input('n: '))
for i in range(n):
a.append(list(map(int, input(' ').split())))
for i in range(n):
b.append([0]*n)
for i in range(n):
for j in range(n):
b[j][i] = a[i][j]
for i in b:
print(i)
Дай бог тебе здоровья, автор!!!)
Артем, большое спасибо за твой труд.
Отличная подача материала. 5+
После этой темы уже можно сделать небольшую игру или первую настоящую программу )))))Большое спасибо
Все супер объяснили!! Огромная благодарность!
Хорошее оъьяснение, но с первого раза мало что понял.Только начало.,Будем смотреть еще и еще раз!
Спасибо все очень понятно. Усвоил то что до этого не мог понять!
Лайк поставил! И подписался.
мужик, ты лучший, лучше обьясняешь чем наш препод в универе
Огромное спасибо за видео. Вопрос. 12:00. range(3) и range(4). Как они понимают что есть столбец а что есть строка. Само определяет где есть такая длина? Спасибо
Вложенные списки - это строки, которые в видео индексируются [ i ]. А из-за того, что они являются элементами главного списка, то и индексируются в первую очередь.
Столбцы составляются из элементов вложенных списков (строк) с одинаковыми индексами. Поэтому, т.к. столбцы состоят из элементов вложенных списков, то и индексируются они вторыми. В видео использовали индексацию столбцов [ j ].
Вообще, использовать "i" и "j" в циклах - это своеобразное негласное правило в программировании.
Думаю, ответ исчерпывающий :)
@@ArseniyBendyukov Да. Спасибо!
@@ArseniyBendyukov чувак, я полностью скопировал код, и он у меня почему то не работает
@@serhiisvyst4489 Не верный ответ. Просто после циклов он пишет print a[i][j]. Соответственно и выводится так - i первый индекс - номер строки, j - второй индекс - номер столбца. А как вы эти переменные назовёте это не важно. Важно что вы запросите на печать
гайсы, я тут немного экспериментировал во время видео, и обнаружил что если вместо новой инициализации списка b = [ ] в цикле применить b.clear() то результат будет совершенно иной. Это взорвало мне мозг! Короче получается что после clear() конечный список 'a' хранит в себе сука ссылки на ту же память что и 'b', просто вывод дважды один и тот же список! это значит что если менять содержимое 'b' то и содержимое 'a' меняется. НО! Если применить инициализацию b = [ ] то все работает как надо, и в конечном списке 'a' будут копии данных из 'b' каждой итерации внутреннего цикла!
a = [ ]
b = [ ]
l = int(input()) # line
c = int(input()) # column
for i in range(l):
b.clear()
< ---- дело все в этом. у автора тут b = [ ]
for j in range(c):
b.append(int(input()))
a.append(b)
for i in a:
print(i)
Входные данные:
2
2
3
4
6
7
Результат:
[6, 7] # это текущее состояние b
[6, 7] # выходит что а просто ссылается на ту же память
применение clear()
>>> a = []
>>> b = []
>>> a = [1, 1, 1, 1]
>>> b
[]
>>> a
[1, 1, 1, 1]
>>> b.append(a)
>>> b
[[1, 1, 1, 1]]
>>> a.clear()
# воздействуем на a
>>> b
[[]]
# и b изменился тоже! т.е. b ссылается на ту же память что и а
>>> a
[]
>>>
>>>
применение инициализации
>>>
>>> a = []
>>> b = []
>>> a = [1, 1, 1, 1]
>>> b.append(a)
>>> b
[[1, 1, 1, 1]]
>>> a
[1, 1, 1, 1]
>>> a = []
# а вот после такого воздействия на а, дающего такой же результат что и a.clear()
>>> a
[]
>>> b
# для b выделяется свою память и b не реагирует на изменения в а
[[1, 1, 1, 1]]
>>>
спасибо за лекцию, жаль выбрал не ваш курс на степике!
Благодарю вас за труд
Спасибо вам,не такая сложная тема,главное не вставать пока не поймёшь
Транспонирование - 1:
n = int(input())
a = []
for i in range(n):
a.append(list(map(int, input().split())))
for i in range(len(a)):
for j in range(len(a)):
print(a[j][i], end=' ')
print()
Транспонирование - 2:
n = int(input())
a = []
for i in range(n):
a.append(list(map(int, input().split())))
for i in range(len(a)):
for j in range(len(a)):
print(a[n - 1 - j][n - 1 - i], end=' ')
print()
Транспонирование - 3:
n ,m = map(int, input().split())
a = []
for i in range(n):
a.append(list(map(int, input().split())))
for i in range(n):
for j in range(m - 1, -1, -1):
print(a[i][j], end=' ')
print()
Красивая матрица:
a = []
for i in range(5):
a.append(list(map(int, input().split())))
for i in range(5):
for j in range(5):
if a[i][j] == 1:
m = max(i, 2) - min(i, 2) + max(j, 2) - min(j, 2)
print(m)
Транспонирование - 4:
n, m = map(int, input().split())
a = []
for i in range(n):
a.append(list(map(int, input().split())))
for i in range(n):
for j in range(m):
print(a[abs(i - n + 1)][j], end=' ')
print()
Сумма главной диагонали:
n = int(input())
a = []
s = 0
for i in range(n):
a.append(list(map(int, input().split())))
for i in range(n):
for j in range(n):
if i == j:
s += a[i][j]
print(s)
Спасибо. Полезный материал
Артём, благодарю! 👍 🔥🔥🔥
Огромное спасибо за этот урок
Спасибо огромное!Все просто и понятно👏
4:41 - а почему списки запринтились тоже с переносами на новую строку??
Слишком быстро. Но, контент, очевидно полезнейший.
Большое спасибо! Нашел много интересного и полезного для себя.
всё очень понятно, спасибо за уроки
То, как я решил задачу "Спираль"
/----------------------------------
n = int(input())
a = []
for i in range(n):
a.append([0] * n)
i = 1
aX = 0
aY = 0
direction = 1
# 1 right
# 2 down
# 3 left
# 4 up
while i < n*n:
while direction == 1:
if aY < n - 1 and a[aX][aY + 1] == 0:
a[aX][aY] = i
aY += 1
i += 1
else:
direction = 2
while direction == 2:
if aX < n - 1 and a[aX + 1][aY] == 0:
a[aX][aY] = i
aX += 1
i += 1
else:
direction = 3
while direction == 3:
if aY > 0 and a[aX][aY - 1] == 0:
a[aX][aY] = i
aY -= 1
i += 1
else:
direction = 4
while direction == 4:
if aX > 0 and a[aX - 1][aY] == 0:
a[aX][aY] = i
aX -= 1
i += 1
else:
direction = 1
a[aX][aY] = i
for i in range(n):
for j in range(n):
print(a[i][j], end=' ')
print()
Большое спасибо я на конец то понял эту тему
Комментарии для поддержки канала 🖐️😉
Видео этого канала как буст на ускорение разработки первого скрипта, начинающего програмистера)
и подписался, и лайк нажал, и колокольчик жмякнул, и коммент оставил.
очень интересно подано и разжевано.
Самое доступное объяснение про матрицы. Но как вижу реальную задачу на создание матриц без определенного количества строк и столбцов, то у меня ступор. То есть вводится произвольное число значений и после этого из этого числа надо создать прямоугольную матрицу!
Нет ни слова про определитель матрицы. Хорошо, что есть Numpy)))
Можно пожалуйста разобрать последнюю задачу, заполнение матрицы
Даладно и вот это 7:00 я искал пол дня что бы сделать формулу для линейной алгебры и в итоге не нашёл и решил повторить синтаксис.
Огромное спасибо!!!
6:50, не снизу вверх, а сверху вниз
ТОПОВЫЙ КУРС!
спасибо за видео, жду продолжения
Сумма матриц:
n, m = map(int, input(' ').split())
matrix1 = []
matrix2 = []
resmatrix = []
for i in range(n):
matrix1.append(list(map(int, input(' ').split())))
print()
for i in range(n):
matrix2.append(list(map(int, input(' ').split())))
for i in range(n):
resmatrix.append([0]*m)
for i in range(n):
for j in range(m):
resmatrix[i][j] = matrix1[i][j] + matrix2[i][j]
print(resmatrix)
Товарищи, подскажите, просмотрев все видео, кроме спонсорских можно на основании полученных знаний поменять строки местами? Не могу решить задачу красивая матрица. Ответ знаю, что максимум за 4 раза можно в центр поместить однерку при условии, что она в одном из углов. А как менять строки в ту или другую сторону не могу додуматься. Кода не жду, хотя бы направление куда двигаться исходя из пройденных курсов без всяких matrix и пр. Того чего ещё не было. Дело принципа.
Мысль такая ещё, что строка это индекс i списка и соответственно поменять строки это поменять значения под данным индексом. Т.е. я должен обойти строку идентифицировать в этой строке 1, если она есть то поменять следующую строку с текущей ( если в индексах то а[i] на а[i+1]) Пока пишу мысль развивается...может нужен промежуточный список, куда складывать данные...
Как же это сцуко элегантно!!!
Замечание. Про обратный обход. Ведь можно ренжировать в обратном порядке, тоесть:
for i in reversed(range(3))
for j in reversed(range(3))
Везде 3, т.к копировал у себя. Опять же, так я думаю, несколько проще, просто дописать reversed()
или же range(len(n),-1,-1)
@@Kasadik почему вторая граница -1? не могу понять.
@@АнатолийЦарапкин потому, что нижняя граница диапазона (start) включается в последовательность, а верхняя (stop) - нет
лайк! очень годно :)
Спасибо!
Эхэхэх из уважения к потраченным деньгам не буду называть платный курс, который дз все от сюда взял (ну или очень похоже), а также вообще эту тему не раскрыл. Четко как чичётка спасибо автору.
Реально круто, прошу рассмотреть возможность рассказать автору о себе, Ваш труд очень интересен.
да я что то стисняюсь камеры)
Спасибо бро ну тема очень тяжелая
подскажите пожалуйста. на степике решил задачу состязания.
решил пошагово. сначала ввел количество n и m, потом заполнил матрицу путем добавления
потом прошел по значениям и суммировал результаты каждого и вывел максимальное значение.
но посмотрев решения других участников обучения я не совсем понял некоторые моменты
и вспомнил что такие моменты уже были в предыдущих задачах.
вот строка в которой L присваевается прям сразу пол задачи
n, m = map(int, input().split())
L = [[int(i) for i in input().split()] for i in range(n)]
S = [sum(i) for i in L]
print(max(S), S.index(max(S)), sep='
')
не могли бы вы пошагово расписать происходящее в этой строке
или в этой где a присваевается решение в одну строку. и зачем в конце первой строки
стоит список из одного нуля
n = int(input().split()[0])
a = [sum(list(map(int, input().split()))) for _ in range(n)]
print(max(a), a.index(max(a)), sep='
')
честно говоря я почувствовал себя умственно хуже чем чувствовал до этого
потому что ребята находящиеся на том же месте в обучении что и я сделали
что то, что мне не совсем понятно
Генераторы списков посмотри видео
Блин ... со спиралью реально жесть ... так и не додумался.
И еще непонятки с таблицой умножения ... вроде как решил, для не очень больших отлично работает, но как быть с огромными таблицами? Сайт бракует через превышение лимита по времени ... ну не удивительно ... если таблица 100000 х 100000 и найти там числа 1000000000. Как то тут наверное метод с вложеными списками не очень подходит.
В задаче Таблица умножения вложенные списки использовал для хранения делителей числа X. А делители искал по аналогии с уроком 21 (egoroffartem.pythonanywhere.com/course/python/21)
Вот такое решение получилось:
n, x = map(int, input().split())
i = 1
a = []
while i ** 2
@@ilyaivanenko4488 Блин ... а я то про урок о делителях то и забыл уже ... Спасиб.
а 6-ю решил?
вот разбор спирали th-cam.com/video/mHTMe_Q4-Xo/w-d-xo.html
11:41 как найти суму всех чисел в списке?
a = [1, 2, 3, 4]
print(sum(a))
Артем, подскажите, пожалуйста, почему при выводе строк в обратном порядке, в цикле for i range(2, -1, -1) вы пишите вторым элементом -1, если нужен обход но ноля. (откуда идем, до куда идем, с каким шагом), не понял почему там -1.
Спасибо!
я о том, как функция range работает в отдельном видео рассказывал
th-cam.com/video/9J0fvF4k4F4/w-d-xo.html
@@egoroffchannel Точно, -1 не включая это число, то есть до ноля.
Спасибо!
А можно ли изменять букву которую мы вытащили из списка например : a[1][0].upper() , если да то как сделать первую заглавную букву?
У строк есть метод capitalize(). Он так раз делает первую букву заглавной, все остальные маленькие
подскажите условие if для вывода обратной диагонали матрицы, пробовал что то вроде:
if i == -j:
или даже
if i ==(-j-1):
ны работаэт =(
Может кто-нибудь помочь с кодом задания Состязания - 3? Код проходит только 8 проверок, но я ни как не могу понять какие такие могут быть входные данные, чтобы результат был не верным. Код ниже:
n,m=map(int,input().split())
a=[]
b=[]
for i in range(n):
a.append(list(map(int, input().split())))
b.append(sum(a[i]))
if i==0:
maxM = i
elif max(a[i]) > max(a[maxM]):
maxM = i
elif max(a[i]) == max(a[maxM]):
maxM = b.index(max(b))
print(maxM)
Решил сам, код:
n,m=map(int,input().split())
a=[]
b=[]
maxM=0
maxI=0
for i in range(n):
a.append(list(map(int, input().split())))
b.append(sum(a[i]))
for j in range(m):
if a[i][j]>maxM:
maxM=a[i][j]
for i in range(n):
if maxM in a[i]:
if maxI
Транспонирование - 1
n = 3
matrix = [[1, 3, 5], [2, 4, 6], [7, 8, 9]]
trans_matrix = []
for i in range(n):
trans_matrix.append([0] * n)
for i in range(n):
for j in range(n):
trans_matrix[j][i] = matrix[i][j]
for i in range(len(trans_matrix)):
print(*trans_matrix[i])
код не принимает сайт,вроде все верно
15:24 я тут шоке так можно было
Артем, могли бы вы подсказать с задачей acmp.ru/asp/do/index.asp?main=task&id_course=1&id_section=8&id_topic=120&id_problem=746? Не совсем понятно, как считывать данные, когда между матрицами пробел.
th-cam.com/video/pbQ4eu_9C3s/w-d-xo.html
Спасибо за материал. Очень подробно и понятно! Автор молодчина. Только почему в конце матрица не сработала, когда число строк стало 5?. Первая цифра 3 (индекс 0,0), а должна быть 10(а она с индексом 0,1 уже получается). Или я что то не понял?
Все правильно, первая 10, просто быстро листает
print a[i][j] Выходит ошибка 'list indices must be integers or slices, not list". Может кто пояснить? Делал пошагово, как в видео.
а вот тут становится сложнее просто смотришь на программу и не понимаешь почему так, было бы сдорово если бы вы объясняли эти нюансы.
Могу дать совет. Напишите такую же программу в PyCharm и с помощью команды Debug понаблюдайте за каждым действием программы. Тогда все становится намного понятнее
Легкий способ научиться рисовать сову.
1. Рисуем круг - это будет голова совы.
2. Рисуем овал впритык к кругу - это будет тело совы.
3. Рисуем остальную сову.
Примерно так я понимаю это видео)))
а можно вопрос, вы показали как обращаться к числам в списке, а как их выборочно выводить?
В соответствии с индексом элемента?
Смотря что вы хотите вывести...
Если только 1 элемент из списка, то можно использовать индексацию, т.к. списки это позволяют. Например:
A = [ 1, 2, 3, 56, 3.7, "Hello" ]
print( A[ 0 ] , A[ -1 ] )
# Вывод: >>> 1 Hello
Индекс [ -1 ] означает, что берётся последний элемент итрерируемого объекта (списка). Ну, а т.к. в Python отсчёт идет не с 1, а с 0, то чтобы вывести первый элемент, используем [ 0 ].
Если хотите вывести некоторую часть / отрывок из списка, то используйте "вырезку". Это долго объяснять, но тема очень простая, и легко найти подходящий видеоурок.
Пример вырезки:
B = [ ' q ', 1 , 728.4 , ' python ' ]
print( B[ 1 : 3 ] )
# Вывод: >>> [ 1 , 728.4 ]
Как видим, в вырезках второй элемент, который определяет до какого элемента вырезать, не включается в саму вырезку.
Разберите, пожалуйста для спонсоров эту задачу: Вам нужно посчитать сумму элементов двумерного квадратного (NxN) списка, которые расположены на главной диагонали.
Программа сперва принимает на вход число N (N
Ок
а ссылку на задачу можно?
А всё, смог сам)
блин, я только вот сегодня сделал
th-cam.com/video/Gyvvs9Ltr9Q/w-d-xo.html
Подскажите, пожалуйста, как в задаче "Симпатичный узор" так написать код, чтобы выдавало одно значение "yes" при симпатичном узоре?
a = []
for i in range(4):
b = []
for j in range(4):
b.append(input())
a.append(b)
for i in a:
print(i)
for i in range(4):
for j in range(4):
if a[i][j] == a[i][j+1] and a[i][j] == a[i+1][j+1] and a[i][j] == a[i+1][j]:
print("yes")
else:
print("no")
Если ставлю счетчик, чтобы выдало yes по условию, то программа выдает ошибку:
"IndexError: list index out of range". На break же программа не реагирует продолжая заход на следующую строку по циклу.
Изначально задать переменной значение ответа, которое будет изменяться в случае выполнения условной конструкции.
flag = 'Yes'
for i in range(len(m)-1):
for j in range(len(m[i])-1):
if (m[ i ][ j ] == m[ i ][ j+1 ] ==
m[ i+1 ][ j ] == m[ i+1 ][ j+1 ]):
flag = 'No'
print(flag)
Чтобы избежать ошибки "list index out of range", т.е выхода за пределы списка, перебираем значения, не включая последнее как по строкам, так и по столбцам.
Здравствуйте! Возможно мне не ответят, но информацию все равно найти не могу.
Объясните пожалуйста, как без ввода значений элементов I и j, через range , функция понимает что I это строка, а j это столбец. И при перемене местами( где j мы ставим в первом цикле, а I в вложенном) python все равно считывает j как столбец, а не строку? При этом если ввести квадратную матрицу, функция тоже понимает где I это строка, j столбец. Спасибо за уроки.
Значение в print смотрите, которое местами не меняется поэтому при перемене местами i и j сначала выводится индекс вложенного цикла потом внешнего.
спасибо спасибо спасибо!
Как установить условие в python на основе типов данных?
давайте видео по List Comprehensions пожалуйста, а то знаю немного с++ а преподаватель мой питоновский гамнокод не принимает(
про генераторы списков,я правильно понял?) если о них речь, то сперва мне надо про функции видео снять
egoroff_channel хорошо будем ждать спасибо за старание )
После видео: задумался, встал, покурил, задумался о смысле жизни....
Большое спасибо!очень доходчиво и просто
А как 2д список преобразовать в 1д?
from functools import reduce
reduce(lambda x,y: x+y, n)
n -> список
Когда мы чисто механически меняем местами "for i in... " на "for j in..." как программа понимает, что мы ей говорим идти по столбцам, а не по строкам? У меня этот вопрос возник, сразу по ходу урока, потом пытался найти ответ, но не нашел. В примере количество элементов в строке и столбцах разное и возможно поэтому питон понимает по какому ренжу идти. А если будет одинаковое??? Две совершенно одинаковые строчки поменяли местами и что???
Смотри предыдущий урок про вложенные циклы
@@egoroffchannel Доехал) Спасибо!
@@psy-reshetnikov Не могли бы вы объяснить?
@@ymnop9652 Пересматривал, вникал, конспектировал прямо в IDLE и въехал. В беседе бы объяснил, пожалуй., а в переписке нет, не смогу,
Так понял, смотрите для простоты понимания давайте уйдём от абстрактных i j и представим это как row - строка col - столбец
представим матрицу 5 на 5, так вот в цикле
for row in range(5)
for col in range(5)
a[row][col] == ...
тут первый цикл row и поэтому пока не пройдёт весь цикл col значение row будет 0 (т.е проходим по первой строке) и только после того как мы пройдём по всем столбцам нулевой строки, значение row станет 1. А в цикле:
for col in range(5)
for row in range(5)
a[row][col] == ...
col первый цикл и пока мы не пройдём по всем строкам нулевого(фактически первого) cтолбца значение col будет равно 0, после прохода по всем рядам col станет 1 и опять бегаем по строкам.
Стоит обратить внимание на то что при когда мы меняем циклы местами мы не меняем местами переменные a[row][col] на a[col][row] т.к это не имеет смысла и сводит все перемены циклов на нет. Надеюсь хоть одному человеку мой комментарий поможет.
Подскажите в чем ошибка.
Сумма матриц.
a,b=map(int,input().split())
k=[]
c=[]
for i in range(a):
k.append(list(map(int,input().split())))
print()
for i in range(a):
c.append(list(map(int,input().split())))
for i in range(a):
for j in range(b):
s=k[i][j]+c[i][j]
print(s,end=" ")
print()
о какой ошибке речь? в синтаксисе или в логике программы?
@@egoroffchannel пишет runtime error
принт лишний убери между вводами списков
@@egoroffchannel Спасибо
хотел на отладке посмотреть но она при запуске выдает это
pydev debugger: process 6388 is connecting
Connected to pydev debugger (build 193.6911.25)
все нормально, говорит что процесс отладки запущен
ниже этих слов вводи свои значения
Здравствуйте,а как можно вложенные списки преобразовать в кортежи отдельные,чтоб 1 вложенный список стал кортежом,второй и тд?
Можно через цикл/ генератор списков преобразовать каждый подмассив основного массива.
array = [ [1,2,3],
[4,5,6],
[7,8,9] ]
new_array = [ ]
for subarray in array:
new_array.append(tuple(subarray))
/
new_array = [tuple(subarray) for subarray in array]
Здравствуйте, я не очень хорошо понял как реализовать 2-ю задачу, где необходимо обойти элементы матрицы сверху вниз слева направо, а не понимаю как это сделать если у нас количество столбцов = количеству строк. Помогите пожалуйста.
n = int(input())
a = []
for i in range(n):
a.append(list(map(int, input().split())))
for i in range(n):
for j in range(n):
print(a[i][j],end=' ')
print()
вот до чего только додумался, а вот как поменять не понимаю (
Привет, так разбор задачи есть, я там объяснил как это делать
@@egoroffchannel что- то не могу найти в плейлисте, не могли бы вы ссылку дать, пожалуйста
@@МатвейЛ-х6п закрепленный комментарий в этом видео, задача Транспонирование 2
Хм я всё понял,вчера читал в книге сегодня наткнулся на урок-всё чётко
Не скажите название книгу?
@@keramak Марк Лутс,Изучаем Пайтон. 5е издание.1часть
@@ДємянВ спасибо
Как ввести матрицу с клавиатуры, не задаваясь количеством строк и столбцов, имея в качестве окончания матрицы ключевое слово, к примеру, 'end'?
Очень круто!
ЗДравствуйте, не могу сообразить как оформить сумму столбцов, как должно работать мысли есть а вот как в код преобразовать не знаю (. Будьте добры спасите несчастного, битый час сижу
n, m = map(int, input().split())
a = []
for i in range(n):
a.append(list(map(int, input().split())))
for i in range(n):
print(sum(a[i]), end=' ')
print()
for i in range(m):
for j in range(n):
....
*Задан целочисленный двумерный массив, состоящий из N строк и M столбцов. Требуется вычислить сумму элементов в каждой строке и в каждом столбце.
это в какой задаче нужно сделать?
могу разбор сделать ее
как заполнить матрицу N x M вводом с клавиатуры, но через Input().split(), т е в одну строку вводить данные ?
list(map(int, input().split()))
Транспонирование - 1
Первая строка входного файла INPUT.TXT содержит натуральное число N
Подскажите пожалуйста как читать из текстового файла?
просто n=int(input())
зачем в обходе по индексам указывать точное число? Это плохая практика, конечно здесь мы знаем какой длинны массив и легко просто вписать в рендж, а если массив огромный? Считать будем? Или все-таки используем лучше range(len(a))? Думаю ответ очевиден)
Что еще лучше, почему так сразу не делать?:
------------------------------
for i in range(len(arr)):
for j in range(len(arr[i])):
print(arr[i][j], end=" ")
print()
-------------------------------
Я может не прав, я писал раньше на C# и поэтому все это вводит слегка в ступор, так как там проще работать с индексами. Прошу если что пояснить/объяснить
на середине видео я перестала понимать что происходит и кто я...
как-то неправильно у меня отображаются списки, не понял, в чём проблема(в строчку):
sun9-58.userapi.com/impg/VSPZK6fw40gJ5hoUHo-iENO6qWk0sm1du4rkkQ/eGTdL-W3_3c.jpg?size=1280x701&quality=96&sign=69291d262611180cb8844da261f95454&type=album