29 Вложенные списки Python
HTML-код
- Опубликовано: 25 окт 2018
- 🔥🔥🔥 Инди-курс по Python 🔥🔥🔥
stepik.org/course/63085/promo
👉👉👉 Свой вопрос по курсу можешь задать в чате
t.me/+SlnNhAO7caBlNDM6
👉👉👉 Также подписывайся на мой телеграмм-канал
t.me/python_egoroff
egoroffartem.pythonanywhere.co...
В видео познакомимся со вложенными списками
Рассмотрим как их создавать и обращаться по индексам к элементам вложенного списка
Научиться обходить элементы двумерного списка (аналог двумерного массива в других языках)
Найдем сумму элементов строки матрицы
Найдем сумму элементов столбца матрицы
Рассмотрим квадратные матрицы (таблицы)
Узнаем, что такое главное диагональ, а также какие элементы ей принадлежат, а какие лежат выше/ниже главной диагонали
Задачи для самостоятельного решения
Транспонирование - 1
acmp.ru/asp/do/index.asp?main...
Транспонирование - 2
acmp.ru/asp/do/index.asp?main...
Красивая матрица
codeforces.com/problemset/prob...
Сумма матриц
acmp.ru/asp/do/index.asp?main...
Симметричная ли матрица?
informatics.msk.ru/mod/statem...
Симпатичный узор
acmp.ru/asp/do/index.asp?main...
Фотографии Брейна
codeforces.com/problemset/prob...
Спираль
acmp.ru/index.asp?main=task&i...
egoroffartem.pythonanywhere.co...
На сайте будет выкладываться более подробная информация о данном курсе и будущих видео.
Все видео этого курса можете найти на сайте
egoroffartem.pythonanywhere.co...
или в Вк
videos-177962775?secti...
Если кому нужна помощь, предлагаю индивидуальные занятия. Подробнее пишите в личку в вк
artem_egoroff
python.study
В данном группе можете найти информацию о новых видео и задать вопросы
🫵 Теория без практики - ничто, поэтому 👇
🐍 stepik.org/course/63085/promo
👉 специально для тебя создал бесплатный топовый курс по Python
👉 В нем тебя ждет:
📗 более 400 практических заданий на программирование
📗 более 250 тестовых заданий на проверку материала
📗 десятки часов видеоматерилов по теории
📗 видеоразборы решения заданий
📗 текстовые материалы по урокам, примеры кода
📗 доступ к закрытому чату с дружественной обстановкой
📗 сертификат в случае успешного прохождения курса
Спасибо за видео . учу питон уже месяц . благодаря вам стал ощущать себя намного тупее чем раньше )
Так тебе помогло видео или нет?
хаахахахахахахаха
@@SigmaTroon да , лучший канал
@@user-xz4fc6fv5r и как уже успехи в изучении ? Стал джуном ?
@@user-ks7vk3ip6i ну смотря что считать джуном , на работу еще не берут, но какйнибудь сайт или скрипт небольшой написать могу. Сейчас на джуна требования как на синьера
Эта тема про матрицы сложнее даже, чем функции))))
А как насчёт dataframe-ов?)
Спасибо огромное! Прочитала разные объяснения на форумах про вложенные списки, но ваше самое понятное и доступное:) Рада быть спонсором вашего канала. У вас качественный контент.
спасибо, очень приятно)
коротко и без воды. супер. Спасибо за труд.
Спасибо за урок, отличный материал и подача. Без суеты, без спешки и все понятно. Супер
Отличный видеоурок, очень хорошее объяснение. Не понимал как работать с диагональю, а теперь есть хотя бы представление. Спасибо
спасибо за уроки. Пересмотрела много видео про вложенные списки, поняла наконец, по вашему объяснению. Наглядно и понятно! Спасибо огромное. 2 недели изучаю, но застряла на вложенных циклах, как-то трудно было представить, а тут всеп понятно. Благодарю!
Такая же ситуация, застрял)) Материал очень хорошо изложен, спасибо автору.
Артем, СПАСИБО огроменное за проделанную работу! Только благодаря Вашим доходчивым словам Пайтон дается легко и просто :)
нет
Ну не легко, но намного проще чем могло бы быть
Большое спасибо, ваша подача + нормальное объяснение дает возможность понять что такое вложенные списки и как с ними работать! По моему мнению это видео одно из лучших для начального ознакомления со вложенностями!
Все супер объяснили!! Огромная благодарность!
Первое просмотренное видео на канале. После 5 минут захотелось поставить лайк. Грамотное объяснение и сопровождение!
Самые подробные видео из всех, что встречал на ютубе. Спасибо вам большое
спасибо за урок ! это уже какой то новый уровень! буду осваивать! Спасибо за ваши труды!
очень доволен этим уроком, очень хорошо объясняете, удачи вам во всех начинаниях!
Артём, благодарю! 👍 🔥🔥🔥
Огромное спасибо вам за ваши уроки! Благодаря вам я начал понимать в языке и теперь занимаюсь по вашим видео
13:35 заполнение вложенного списка с клавиатуры.
Используется дополнительный временный список, для хранения элементов одной строки. А потом за один раз всю эту строку добавляем в основной список.
Очень понятно видео, спасибо.
Спасибо большое! Очень доходчиво и понятно!
Бро ты лучшее всех!!! Такому материала не ожидать. Молодец
Спасибо. Полезный материал
Спасибо все очень понятно. Усвоил то что до этого не мог понять!
Лайк поставил! И подписался.
Благодаря тебе я выучил питон и теперь легко даются другие языки. Спасибо за это огромное
Здравствуйте. За сколько вы выучили?
@@barbi8271 за год не постоянных тренировок в этой сфере
@@user-ch1ny3xx7p я уже все. Ничего не хочу
@@barbi8271 Не сдавайся! Мы тупенькие, но упорные! В этом нужно просто постоянно вариться!
@@barbi8271 Не повторяй моих ошибок.Лучше не забрасыв учёбу
Артем, большое спасибо за твой труд.
Отличная подача материала. 5+
После этой темы уже можно сделать небольшую игру или первую настоящую программу )))))Большое спасибо
Огромное спасибо!!!
Очень круто!
Огромное спасибо за этот урок
Большое спасибо! Нашел много интересного и полезного для себя.
Спасибо огромное!Все просто и понятно👏
спасибо за видео, жду продолжения
Транспонирование 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)
Спасибо!
Хорошее оъьяснение, но с первого раза мало что понял.Только начало.,Будем смотреть еще и еще раз!
мужик, ты лучший, лучше обьясняешь чем наш препод в универе
Разбор задач
Транспонирование 2 - ruclips.net/video/QfqcqeTrSR0/видео.html
Сумма главной диагонали ruclips.net/video/Gyvvs9Ltr9Q/видео.html
Симметричная ли матрица - ruclips.net/video/JEu4oF3l7w4/видео.html
Красивая матрица - ruclips.net/video/6TXtHdiyyCo/видео.html
Сумма матриц - ruclips.net/video/pbQ4eu_9C3s/видео.html
Подарок для Лены - ruclips.net/video/YSqZmLr9uss/видео.html
Спираль ruclips.net/video/mHTMe_Q4-Xo/видео.html
Морской бой 2 ruclips.net/video/BA9zmfQyfdo/видео.html
Состязания-3 ruclips.net/video/_tzOEBBFkJs/видео.html
Вам следует закрепить этот комментарий
Спасибо вам,не такая сложная тема,главное не вставать пока не поймёшь
ТОПОВЫЙ КУРС!
всё очень понятно, спасибо за уроки
Большое спасибо я на конец то понял эту тему
спасибо за лекцию, жаль выбрал не ваш курс на степике!
Нет ни слова про определитель матрицы. Хорошо, что есть Numpy)))
Как же это сцуко элегантно!!!
Спасибо.
лайк! очень годно :)
Большое спасибо!очень доходчиво и просто
спасибо спасибо спасибо!
Слишком быстро. Но, контент, очевидно полезнейший.
и подписался, и лайк нажал, и колокольчик жмякнул, и коммент оставил.
очень интересно подано и разжевано.
Cпасибо
Thank you
очень круто обьяснил , спасибо !
гайсы, я тут немного экспериментировал во время видео, и обнаружил что если вместо новой инициализации списка 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]]
>>>
Фига себе. Да ты красавец! Очень ясно и наглядно. +
Спасибо бро ну тема очень тяжелая
Лучший
Видео этого канала как буст на ускорение разработки первого скрипта, начинающего програмистера)
боже спасибо
Спасибо за помащ
Хотелось бы отдельно уроки по PyCharm типа как смотреть работу переменных, в роликах это не особо рассказывается и приходится по нескольку раз перематывать чтоб понять что там нажали.
По шагову роботу кода можна нажав на кнопку дебагер в пайчарме
Артем, подскажите, пожалуйста, почему при выводе строк в обратном порядке, в цикле for i range(2, -1, -1) вы пишите вторым элементом -1, если нужен обход но ноля. (откуда идем, до куда идем, с каким шагом), не понял почему там -1.
Спасибо!
я о том, как функция range работает в отдельном видео рассказывал
ruclips.net/video/9J0fvF4k4F4/видео.html
@@egoroffchannel Точно, -1 не включая это число, то есть до ноля.
Спасибо!
После видео: задумался, встал, покурил, задумался о смысле жизни....
Даладно и вот это 7:00 я искал пол дня что бы сделать формулу для линейной алгебры и в итоге не нашёл и решил повторить синтаксис.
Можно пожалуйста разобрать последнюю задачу, заполнение матрицы
Спасибо за материал. Очень подробно и понятно! Автор молодчина. Только почему в конце матрица не сработала, когда число строк стало 5?. Первая цифра 3 (индекс 0,0), а должна быть 10(а она с индексом 0,1 уже получается). Или я что то не понял?
Все правильно, первая 10, просто быстро листает
А можно ли изменять букву которую мы вытащили из списка например : a[1][0].upper() , если да то как сделать первую заглавную букву?
У строк есть метод capitalize(). Он так раз делает первую букву заглавной, все остальные маленькие
Артем, могли бы вы подсказать с задачей acmp.ru/asp/do/index.asp?main=task&id_course=1&id_section=8&id_topic=120&id_problem=746? Не совсем понятно, как считывать данные, когда между матрицами пробел.
ruclips.net/video/pbQ4eu_9C3s/видео.html
❤️❤️❤️
Комментарии для поддержки канала 🖐️😉
👏👍
Легкий способ научиться рисовать сову.
1. Рисуем круг - это будет голова совы.
2. Рисуем овал впритык к кругу - это будет тело совы.
3. Рисуем остальную сову.
Примерно так я понимаю это видео)))
Эхэхэх из уважения к потраченным деньгам не буду называть платный курс, который дз все от сюда взял (ну или очень похоже), а также вообще эту тему не раскрыл. Четко как чичётка спасибо автору.
Реально круто, прошу рассмотреть возможность рассказать автору о себе, Ваш труд очень интересен.
да я что то стисняюсь камеры)
Сумма матриц:
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)
Здравствуйте,а как можно вложенные списки преобразовать в кортежи отдельные,чтоб 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]
15:24 я тут шоке так можно было
подскажите пожалуйста. на степике решил задачу состязания.
решил пошагово. сначала ввел количество 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='
')
честно говоря я почувствовал себя умственно хуже чем чувствовал до этого
потому что ребята находящиеся на том же месте в обучении что и я сделали
что то, что мне не совсем понятно
Генераторы списков посмотри видео
подскажите условие if для вывода обратной диагонали матрицы, пробовал что то вроде:
if i == -j:
или даже
if i ==(-j-1):
ны работаэт =(
Подскажите, пожалуйста, как в задаче "Симпатичный узор" так написать код, чтобы выдавало одно значение "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", т.е выхода за пределы списка, перебираем значения, не включая последнее как по строкам, так и по столбцам.
Хм я всё понял,вчера читал в книге сегодня наткнулся на урок-всё чётко
Не скажите название книгу?
@@keramak Марк Лутс,Изучаем Пайтон. 5е издание.1часть
@@user-qs7st3sw8c спасибо
То, как я решил задачу "Спираль"
/----------------------------------
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()
Огромное спасибо за видео. Вопрос. 12:00. range(3) и range(4). Как они понимают что есть столбец а что есть строка. Само определяет где есть такая длина? Спасибо
Вложенные списки - это строки, которые в видео индексируются [ i ]. А из-за того, что они являются элементами главного списка, то и индексируются в первую очередь.
Столбцы составляются из элементов вложенных списков (строк) с одинаковыми индексами. Поэтому, т.к. столбцы состоят из элементов вложенных списков, то и индексируются они вторыми. В видео использовали индексацию столбцов [ j ].
Вообще, использовать "i" и "j" в циклах - это своеобразное негласное правило в программировании.
Думаю, ответ исчерпывающий :)
@@ArseniyBendyukov Да. Спасибо!
@@ArseniyBendyukov чувак, я полностью скопировал код, и он у меня почему то не работает
@@serhiisvyst4489 Не верный ответ. Просто после циклов он пишет print a[i][j]. Соответственно и выводится так - i первый индекс - номер строки, j - второй индекс - номер столбца. А как вы эти переменные назовёте это не важно. Важно что вы запросите на печать
Товарищи, подскажите, просмотрев все видео, кроме спонсорских можно на основании полученных знаний поменять строки местами? Не могу решить задачу красивая матрица. Ответ знаю, что максимум за 4 раза можно в центр поместить однерку при условии, что она в одном из углов. А как менять строки в ту или другую сторону не могу додуматься. Кода не жду, хотя бы направление куда двигаться исходя из пройденных курсов без всяких matrix и пр. Того чего ещё не было. Дело принципа.
Мысль такая ещё, что строка это индекс i списка и соответственно поменять строки это поменять значения под данным индексом. Т.е. я должен обойти строку идентифицировать в этой строке 1, если она есть то поменять следующую строку с текущей ( если в индексах то а[i] на а[i+1]) Пока пишу мысль развивается...может нужен промежуточный список, куда складывать данные...
4:41 - а почему списки запринтились тоже с переносами на новую строку??
а можно вопрос, вы показали как обращаться к числам в списке, а как их выборочно выводить?
В соответствии с индексом элемента?
Смотря что вы хотите вывести...
Если только 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 ]
Как видим, в вырезках второй элемент, который определяет до какого элемента вырезать, не включается в саму вырезку.
эта самый лутшый канал! Почему так мало подпишиков?
давайте видео по List Comprehensions пожалуйста, а то знаю немного с++ а преподаватель мой питоновский гамнокод не принимает(
про генераторы списков,я правильно понял?) если о них речь, то сперва мне надо про функции видео снять
egoroff_channel хорошо будем ждать спасибо за старание )
а вот тут становится сложнее просто смотришь на программу и не понимаешь почему так, было бы сдорово если бы вы объясняли эти нюансы.
Могу дать совет. Напишите такую же программу в PyCharm и с помощью команды Debug понаблюдайте за каждым действием программы. Тогда все становится намного понятнее
Замечание. Про обратный обход. Ведь можно ренжировать в обратном порядке, тоесть:
for i in reversed(range(3))
for j in reversed(range(3))
Везде 3, т.к копировал у себя. Опять же, так я думаю, несколько проще, просто дописать reversed()
или же range(len(n),-1,-1)
@@bohdankrutskevych7467 почему вторая граница -1? не могу понять.
@@user-nx4od7cp7m потому, что нижняя граница диапазона (start) включается в последовательность, а верхняя (stop) - нет
в Pandas'е будет быстрее)
Здравствуйте, подскажите пожалуйста, Как решить задачу "Симметричная матрица"?
a=int(input())
t=[]
count=0
for i in range(a):
b=list(map(int,input().split()))
t=t+[b]
for j in range(a):
for j2 in range(a):
if t[j][j2]!=t[j2][j]:
count+=1
if count==0:
print('yes')
else:
print('no')
Спасибо огромное, подскажите пожалуйста, я не поняла задачу "красивое матрица", о чем она и что там надо делать?
Так разбор задачи есть)
@@egoroffchannel нету, я не могу понять саму смысл, откуда цифра 3 выходит, несколько раз прочитала то так и не поняла суть задачи.
@@As-hv9fj а где найти эту задачу
на середине видео я перестала понимать что происходит и кто я...
Здравствуйте! Возможно мне не ответят, но информацию все равно найти не могу.
Объясните пожалуйста, как без ввода значений элементов I и j, через range , функция понимает что I это строка, а j это столбец. И при перемене местами( где j мы ставим в первом цикле, а I в вложенном) python все равно считывает j как столбец, а не строку? При этом если ввести квадратную матрицу, функция тоже понимает где I это строка, j столбец. Спасибо за уроки.
Значение в print смотрите, которое местами не меняется поэтому при перемене местами i и j сначала выводится индекс вложенного цикла потом внешнего.
Здравствуйте, я не очень хорошо понял как реализовать 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 что- то не могу найти в плейлисте, не могли бы вы ссылку дать, пожалуйста
@@user-yf7ce2xi6c закрепленный комментарий в этом видео, задача Транспонирование 2
хотел на отладке посмотреть но она при запуске выдает это
pydev debugger: process 6388 is connecting
Connected to pydev debugger (build 193.6911.25)
все нормально, говорит что процесс отладки запущен
ниже этих слов вводи свои значения
Вложенные списки в народе матрицы
Транспонирование - 1
Первая строка входного файла INPUT.TXT содержит натуральное число N
Подскажите пожалуйста как читать из текстового файла?
просто n=int(input())
Как ввести матрицу с клавиатуры, не задаваясь количеством строк и столбцов, имея в качестве окончания матрицы ключевое слово, к примеру, 'end'?
Mne interesno pochemy ia ne mogu predidushee video posmotret, kakoeto ogranichenia po memberam?! Ne podskajite problemu?!
С вами можно связаться на Инстаграмме или фаэйсбуке?
facebook.com/artem.egorov.925