Вот я честно не понимаю, на сколько нужно быть правильным человеком и учебным заведением, что бы такую информацию выкладывать бесплатно и в таком качестве. Большое спасибо вам за работу, от всего интернет сообщества России. Думаю я не преувеличил. Большая, полезная, великолепная работа для развития всей страны.
Сильно преувеличиваешь, похоже, что в силу идеалистических представлений об окружающем мире и в силу того, что "слаще морковки" ничего не пробовал, т.е. не знаешь, что такое образование, которое направлено на подготовку специалистов, а не на штамповку компетентных потребителей. Какую такую информацию, в каком качестве? Сплошное самолюбование автора и ни дидактики, ни методики, ничего-то особенного. Современное образование, это заигрывание с УО, с набалованными детишками, это снижение требований и сложности для того, чтобы набрать необходимое количество молодых балбесов для з/п преподов ну и немного или много в карман положить. Это не про образование все, это все про профанацию и свободный рынок.
Тайм-коды: Массивы, тип list 1:30 Список (list) как массив данных. Массив - такой способ доступа к данным, когда есть 1 имя и сразу много данных 4:15 for x in A: 8:18 модель данных в Python. Как хранятся данные. Есть изменяемые и неизменяемые типы (объекты) 9:05 числа являются константами. Неизменяемый тип 9:52 ссылочная модель связи имени и объекта 13:30 доступ к элементу массива по индексу. У первого элемента - индекс 0. Поэлементный доступ к массиву 17:31 А = [0] * 1000 # создание массива А с тысячью нулей 19:08 уровень заполненности массива. Top 25:42 удаление элемента из конца и начала массива 27:12 копирование массива. поэлементное копирование. копирование задом-наперёд 29:58 хотя имена а Питоне создаются методом присваивания в них, нельзя сделать С = А, чтобы сделать копию списка 30:36 ссылочная модель данных в Python 32:46 изменяемость списка. list - изменяемый объект 33:34 int неизменяемый объект. Число по ссылке изменить нельзя 35:40 C = list(A) # чтобы сделать дубликат списка. копию 36:20 линейный поиск в массиве 36:52 в параметрах функции можно уточнить тип параметра (после двоеточия) 39:22 тестирование 47:16 функция с pass возвращает None type (тип Ничего) - специфическая переменная 49:19 алгоритм обращения массива 1:03:03 добавление элемента в конец и в начало массива 1:04:06 алгоритм циклического сдвига в массиве. влево 1:08:55 вправо 1:10:40 алгоритм решето Эратосфена 1:12:24 bool неизменяемый тип 1:13:38 if A[k] # если A[k] равен True 1:17:18 тернарный оператор
Вот это я понимаю - класс! Человек просто взял и на примере кнопок в лифте и наименовании этажей во Франции идеально объяснил логичность индексации с 0. Браво!
Здоровья вам Тимофей Хирьянов. Как хорошо что я нашел ваш канал. Читать статьи разные что такое стр инт и т.д. Окей базовые понятие , а тогда думаешь а чего же дальше начать, думал нужно учить синтаксисы ,а они оказываются непостоянны и меняются. То что вы раскладывание по полочкам облегчает мне и другим жизнь Я люблю чтобы всё было от и до и с рассказано почему так ( по каким правилам ) А не то что в интернете говорят общие понятия - что должно быть так и никак иначе А потом у меня другие вопросы и ищешь в интернете на свой же вопрос ответ.
За такое преподавание педагоги должны получать большую зарплату и входить в селебрити) давно пора записывать и выкладывать лекции, чтобы отсеять и поувольнять тех, кто бубнит себе под нос, путается в показаниях и кого тоска зеленая слушать) спасибо за увлеченность и добросовестность
То чувство, когда в бесплатных лекциях на youtube человек объясняет проще и понятнее, чем в купленных мной платных онлайн-курсах за 30к... Жаль, что нельзя пожать руку, очень талантливый преподаватель!
еще бы изначально учил правильно переменные называть - цены бы не было. А то лист с именем A и элементы с именем x это фигня полная, за такое на реальных проектах больно бьют по шапке. С заглавной буквы вообще принято называть классы
Хорошие емкие лекции. Спасибо за материал. Было бы гораздо удобнее если в названии будет тема лекции! Например: "Алгоритмы на Python 3. Лекция №5 (Массивы)"
Знания бесплатно и бескорыстно -- это про коммунистов, а не про ррррусских. Ведь какой-нибудь буржуй, наживающийся на интеллектуальной собственности, не перестает от этого быть ррррусским буржуем. Верно? Правильно сформулировать: прогрессивный ученый левых взглядов (даже если он сам лепит чушь про какую-то нравственность в лагере праваков). По поступкам товарищ вполне себе марксист. =))
@@Русь-Родина А пока с чужого канала, это не бескорыстно? Нет, ну если ему заплатил кто-то за съемку уроков... Ну хз. Здесь бескорыстность не в том, что человек ничего не получил за свой труд педагога, это был бы альтруизм. Бескорыстие в том, что всеми знаниями вправе воспользоваться всякий человек. Интеллектуальная собственность -- зло!
@@Русь-Родина Являясь достоянием всего человечества, это уже не интеллектуальная собственность, а общечеловеческое богатство. Я имел в виду, конечно же, частную собственность на знания, ну или собственность корпоративную. Ну когда остальные обязаны платить и покупать каждый раз, когда им необходимо, а у продавцов от этого не убывает. Уродливая система капитала, античеловеческая. Сделали из знаний подобие валюты, которая призвана приумножать их капиталы. Причем авторы к этим продажам зачастую не имеют никакого отношения. Они трудились на корпорацию, вот она и присвоила все их наработки. А человек просто раб, получил зарплату и всё! Никакой интеллектуальной ренты, хрен в зубы, и грызи. =) В общем, паразитическая система.
Вы великолепный преподаватель. Смотрю все ваши лекции с превеликим удовольствием и на 6-й лекции могу с уверенностью сказать, что именно этого мне не хватало при кодировании. Я уже пишу на питоне телеграмм ботов и работаю с БД но это все занимало очень много времени так как не всегда было достаточно понимания как это работает. Все конечно же гуглилось но до конца понять, что то все-таки не мог.
- Список как массив данных (1:24): - Перебор списка по порядку (просто вывод элементов без возможности изменения их в списке): 4:04 - Модель данных в Питоне (как получить доступ к самим объектам в списке и манипулировать ими): 7:48 - Как создавать длинные списки (которые проблематично создавать вручную): 17:27 - Добавление элементов в список с помощью цикла while: 18:58 - Вывод чисел из списка в обратном порядки с помощью цикла for: 23:54 - Удаление элементов из списка: 25:42 - Копирование массива: 27:08 - Сокращенный вариант копирования списка через list: 35:40 - Линейный поиск в массиве: 36:13 - Написание функции тестирования: 39:43 - Алгоритм обращения массива: 49:12 - Добавление эл. в конец и в начало массива: 1:03:03 - Алгоритм циклического сдвига: 1:03:47 - Решето Эратосфена: 1:10:40
Правильно говорят: "Если преподаватель не может объяснить 6 летнему ребенку, то он сам не разбирается в предмете!". Лекции просто чудо!!! В четко, ясно и понятно.
Вообще интересное объяснение логичности индексации с нуля. Забавное. Строго говоря во Франции нет нулевых этажей (хотя кнопка ноль в лифте присутствует). Первый этаж в нашем понимании по французски это Rez-de-chaussée произносится что-то вроде Редшосэ и переводится как «рядом с дорогой из известняка» или «на уровне дороги из известняка». Я так понимаю по нашему это земляной пол :). Даже в лохматой древности у нас не было в традиции строить дома с земляным полом, климат не тот. :) Поэтому вероятно у нас всё начинается с первого этажа, а не с нулевого.
В "решете" во втором цикле просева составных чисел в range вместо 2*k лучше использовать k**2. Все до него будут составные, отфильтрованные предыдущими итеррациями
Тимофей Федорович, спасибо Вам большое за публикации своих курсов на ютубе! У меня возникло одно замечание, я его выскажу, не сочтите за неуважение. Я как будто заметил, что некоторые вещи людям непонятны, на первом курсе у студента ветер в голове) да и мне тоже иногда трудно) вот к примеру эти списки, а зачем они вообще нужны? А если непонятно зачем этот инструмент нужен, трудно в нем разобраться. Не лучше ли подавать материал с практической точки зрения? т.е. вот к примеру есть задача с помощью питона проанализировать введеные данные к примеру значения температуры (или я не знаю что еще))), и вот для этого можно применить такую вещь как списки, и вот так-то они устроены и т.д. или же еще на первой лекции можно было поставить задачу написать примитивный калькулятор, и параллельно объяснить все базовые вещи. ну как то так, спасибо)
def reverse_list(lst): ''' разворачивает список ''' b, n = [], -1 for i in range(len(lst)): b.append(lst[n]) n -= 1 return b lst = ['5', '4', '3', '2', '1'] print(reverse_list(lst))
Для начала, раз Вы мне ответили, хочу поблагодарить Вас за эти лекции. Очень интересно и доступно объясняете. Занимаюсь с удовольствием. А насчёт "отжигаете", я имел ввиду, что в конце лекций Вы часто в сжатые сроки объясняете сложные моменты :) И благо, я могу перемотать, посмотреть и обдумать несколько раз. На живой лекции я бы такой роскошью не обладал :)
1:18:46: Тернарный оператор рекомендую попробовать так: (alternative_false, alternative_true)[your_check] Пример: ('Number is prime', 'Number is complex')[is_number_prime(number)] Это связано с тем, что True, False преобразуются в цифры 0 и 1, а их можно использовать в качестве индекса. Сравним эту и тернарную форму: 1. ('Number is complex', 'Number is prime')[is_number_prime(number)] 2. 'Number is prime' if [is_number_prime(number)] else 'Number is prime' Возможно, дело вкуса. Но мой вариант, мне кажется, выглядит привлекательнее
Чорт! Такой препод, что мне хочется все бросить и бегом программировать, писать самые простые вещи, тупить, ломать голову, снова тупить, решать и дальше дальше дальше. Все четко, системно, понятно, мозги шевелятся.
Тимофей, ну где ты был (да и я тоже) лет эдак 22 назад? )))) мне бы таких преподов (еще раз повторюсь) в универе, я бы стал точно программистом. А сейчас приходится самообразованием заниматься - что абсолютно несложно несмотря на пройденное время и возраст))) Спасибо и удачи!
можно циклический сдвиг осуществлять при помощи деления по модулю, т.о. индекс всегда остается в пределах массива и временная переменная не нужна def cyclic_shift(N:list): l = len(N) for i in range(l - 1): index = (i + 1) % l N[i], N[index] = N[index], N[i] return N
Можно, только не ясно зачем - отказались от временной переменной, получили двукратный рост операций с памятью на каждом шаге цикла. То есть работает дольше, а профит не ясен. Подробнее: ВАРИАНТ 1 (исходный): на каждой итерации соседняя ячейка тупо затирается новым значением, то есть это операция: "считать исходное значение в ячейке A ==> сохранить его в ячейку А+1". О судьбе исходного значения в "А+1" можно не заботиться, так как массив обходим в направлении, противоположном направлению сдвига, а самый первый элемент (который в любом случае будет затерт) сохранили во временную переменную еще до цикла. Останется только по окончании цикла восстановить его из tmp в условно "последнюю" (или "первую") ячейку; ВАРИАНТ 2 (новый): ради отказа от временной переменной, мы _на каждой итерации_ вынуждены сохранять значение соседней ячейки, так как иначе её содержимое будет утеряно. Вы для этого используете "обмен значениями", но строго говоря это не суть - так или иначе мы получим операции, по нагрузке схожие с: "считать исходные значения в ячейках А, Б ==> сохранить исходные значения из А, Б в ячейки Б, А". Даже на вскидку видно, что это в два раза больше на каждом шаге (читаем и А и Б, записываем так же и А и Б). Не явно действий может быть и того больше, так как по факту "обмен значениями переменных" Питон (если угодно Пайтон) также осуществляет через временную переменную, только делает это незаметно для программиста. Об этом в том числе сказано в данных уроках (если не ошибаюсь, в первом, там где речь о базовом синтаксисе объявления/присваивания значений переменных).
В правильном направлении мыслите, только можно сделать обертку над листом, где модом сдвигать только индекс, чуть вырастет время доступа к данным, но записи в них не будет происходить, выигрыш на лицо.
@Тимофей Хирьянов, доброго времени суток. В Контесте для групп 737 и 738. Задание D, даётся последовательность чисел, однако в тестах с 6 по 10 дается список. И судя по проверкам, необходимо переместить последний элемент в начало. В самом задании об этом ни чего не сказано. 1-й семестр, 6-я неделя (группы 737-738
@Александр Лагутов Спасибо большое за фидбек! Действительно, в тестах к заданию ошибка. Только это не список, а просто числа даны в строку. Я бы выкинул тесты с 6-го по 10-й или изменил их, но прямо сейчас у меня нет доступа к тестам на этом сервере. Я написал сисадмину с запросом доступа, но пока не могу вам помочь.
Напишите мне персонально в Telegram через несколько дней с копией вашего сообщения. Я могу забыть про эту проблему, а доступ к тому времени мне скорее всего уже дадут.
30:00 легче вот так) from random import randint N = 5 A = B = [0] * N for k in range(N): B[k] = A[k] = randint(0,10) #запихивает рандомные числа в список
Тимофей Федорович не незапустил тест на функцию invert_array, а она все равно выдала что test - Failed, так как сравнение для массивов A == B не работате. В этом случае сравнение будет не самих элементов а ссылок на область память, что для разных массивов всегда будет False
решето эратосфена можно сильно ускорить и в два раза сократить выделяемую память, если проверять только нечетные числа (индекс булевого массива = индекс нечетного числа, перевод из индекса в число 2*k+1) и вложенный for начинать не с 2*k, а с k*k, а внешний вести до sqrt(N)
Это уже программистские фишки (оптимизация кода и алгоритма). Вы абстрагируйтесь от того что вы опытный программист, а только что начинающий. А вообще Тимофей Федорович про это заикнулся, но не продолжил.
1:02:27 к N//2 в range нужно еще прибавить единицу, иначе итераций цикла будет недостаточно для достижения середины заданного участка списка. Ну и в конце еще нужно дописать, чтО функция будет возвращать, согласно поставленной задаче - фрагмент обращенного списка, определенного числом N. Таким образом, законченное решение будет следующим: for k in range(N//2 + 1): A[k], A[N-1-k] = A[N-1-k], A[k] return A[:N] А вообще - решение классное. Спасибо, Тимофей Федорович! Я, пока смотрел, поставил на паузу и решил задачу двумя способами: 1. используя метод .reverse(), и применив его к нужному фрагменту списка, определенного числом N: fragment = A[0:N] fragment.reverse() return fragment 2. создавая пустой список и наполняя его в цикле с помощью .append(), инициировав обратный счет от N-1 до -1: reversed_list = [] for i in range(N-1, -1, -1): reversed_list.append(A[i]) return reversed_list Ваш метод был не очевидным, и по этой причине - классным и ценным! Спасибо!!!
Evgeniy Cheremisinov относительно возвращения списка функцией ваше утверждение справедливо только в том случае, если в результате ее работы нас будет интересовать ВЕСЬ обращённый список. Но задача ведь стоит иная: "Обращение массива в рамках индексов от 0 до N-1", т.е. не весь массив, а его часть, отмеченная N. Поскольку N не обязательно будет совпадать с последним индексом списка, возврат участка имеет смысл.
Evgeniy Cheremisinov да, просчитался вчера насчёт единицы. Она там не нужна, спасибо. А насчёт возврата функции - нам же не весь список вроде как нужен, а его фрагмент с начала до N, насколько я понял постановку задачи.
Evgeniy Cheremisinov да, тут все зависит от постановки задачи) я понял иначе. Тем не менее, моя строчка возврата функцией заданного фрагмента обращённого списка добавляет функции универсальности и гибкости, так как позволяет получить результат как в работе с целым списком, так и с его фрагментом)
Если вы имеете ввиду, что вы поменяли таким образом список A, то некоем образом это не работает. Если стоит задача вывести квадраты значений списка А, то да
24:20 "Начиная с top-1", а вместо этого в range пишет 4, что неверно. 1:06:00 Зачем так сложно организовывать циклический сдвиг? Достаточно цикла for со swap'ом соседних элементов. 1:03:00 написал программу, исправил все ошибки и не запустил, не показал что заработала. В одно месте говорит что итерации цикла считаются с 1, в другом говорит 0-ая итерация
@@xinng0n, навязанный стереотип?! А чего тогда в любом (по возрасту и теме) учебном коллективе, когда не интересно, "студенты" начинают отвлекаться, разговаривать, заниматься посторонними делами?!
Вот я честно не понимаю, на сколько нужно быть правильным человеком и учебным заведением, что бы такую информацию выкладывать бесплатно и в таком качестве. Большое спасибо вам за работу, от всего интернет сообщества России. Думаю я не преувеличил. Большая, полезная, великолепная работа для развития всей страны.
Это современный взгляд, испорченный капитализмом. При союзе образование было бесплатным.
Поддерживаю!
@@rio5121 если вспомнить все, что было при нем, то лучше уж так, как сейчас
@@quddi, если бы еще знать хоть что-то о "нем".
Сильно преувеличиваешь, похоже, что в силу идеалистических представлений об окружающем мире и в силу того,
что "слаще морковки" ничего не пробовал, т.е. не знаешь, что такое образование, которое направлено на подготовку специалистов,
а не на штамповку компетентных потребителей.
Какую такую информацию, в каком качестве?
Сплошное самолюбование автора и ни дидактики, ни методики, ничего-то особенного.
Современное образование, это заигрывание с УО, с набалованными детишками,
это снижение требований и сложности для того, чтобы набрать необходимое количество молодых балбесов
для з/п преподов ну и немного или много в карман положить.
Это не про образование все, это все про профанацию и свободный рынок.
Тайм-коды: Массивы, тип list
1:30 Список (list) как массив данных. Массив - такой способ доступа к данным, когда есть 1 имя и сразу много данных
4:15 for x in A:
8:18 модель данных в Python. Как хранятся данные. Есть изменяемые и неизменяемые типы (объекты)
9:05 числа являются константами. Неизменяемый тип
9:52 ссылочная модель связи имени и объекта
13:30 доступ к элементу массива по индексу. У первого элемента - индекс 0. Поэлементный доступ к массиву
17:31 А = [0] * 1000 # создание массива А с тысячью нулей
19:08 уровень заполненности массива. Top
25:42 удаление элемента из конца и начала массива
27:12 копирование массива. поэлементное копирование. копирование задом-наперёд
29:58 хотя имена а Питоне создаются методом присваивания в них, нельзя сделать С = А, чтобы сделать копию списка
30:36 ссылочная модель данных в Python
32:46 изменяемость списка. list - изменяемый объект
33:34 int неизменяемый объект. Число по ссылке изменить нельзя
35:40 C = list(A) # чтобы сделать дубликат списка. копию
36:20 линейный поиск в массиве
36:52 в параметрах функции можно уточнить тип параметра (после двоеточия)
39:22 тестирование
47:16 функция с pass возвращает None type (тип Ничего) - специфическая переменная
49:19 алгоритм обращения массива
1:03:03 добавление элемента в конец и в начало массива
1:04:06 алгоритм циклического сдвига в массиве. влево
1:08:55 вправо
1:10:40 алгоритм решето Эратосфена
1:12:24 bool неизменяемый тип
1:13:38 if A[k] # если A[k] равен True
1:17:18 тернарный оператор
спасибо вам!
Иритака, ты очень очень очень хороший человек! Твои таймкоды круче яндекса и гугла вместе взятых!
@@igoweiqibaduk8283 Ну Очень приятно! Спасибо огромное!!
Массив, это не способ доступа, а структура данных.
Под способом доступа можно понимать тот или иной конкретный синтаксис или работу интерпретатора.
@@ivanprokofyev хорошее замечание
Вот это я понимаю - класс!
Человек просто взял и на примере кнопок в лифте и наименовании этажей во Франции идеально объяснил логичность индексации с 0.
Браво!
Здоровья вам Тимофей Хирьянов. Как хорошо что я нашел ваш канал. Читать статьи разные что такое стр инт и т.д. Окей базовые понятие , а тогда думаешь а чего же дальше начать, думал нужно учить синтаксисы ,а они оказываются непостоянны и меняются. То что вы раскладывание по полочкам облегчает мне и другим жизнь
Я люблю чтобы всё было от и до и с рассказано почему так ( по каким правилам )
А не то что в интернете говорят общие понятия - что должно быть так и никак иначе А потом у меня другие вопросы и ищешь в интернете на свой же вопрос ответ.
За такое преподавание педагоги должны получать большую зарплату и входить в селебрити) давно пора записывать и выкладывать лекции, чтобы отсеять и поувольнять тех, кто бубнит себе под нос, путается в показаниях и кого тоска зеленая слушать) спасибо за увлеченность и добросовестность
То чувство, когда в бесплатных лекциях на youtube человек объясняет проще и понятнее, чем в купленных мной платных онлайн-курсах за 30к...
Жаль, что нельзя пожать руку, очень талантливый преподаватель!
Ну так это не просто человек, а преподаватель МФТИ, квалифицированнее некоторых преподов курсов будет
с курсами за 150к тоже самое... у меня столько стоит
зачем сравнивать университетское образование и онлайн-курсы ))
еще бы изначально учил правильно переменные называть - цены бы не было. А то лист с именем A и элементы с именем x это фигня полная, за такое на реальных проектах больно бьют по шапке. С заглавной буквы вообще принято называть классы
Хорошие емкие лекции. Спасибо за материал. Было бы гораздо удобнее если в названии будет тема лекции! Например: "Алгоритмы на Python 3. Лекция №5 (Массивы)"
Я Вас очень сильно уважаю. Словами не передать как я счастлив смотреть Ваши лекции
Тимофей Федорович, низкий Вам поклон за ёмкую и познавательную лекцию!
Такие знания . Бесплатно . Бескорыстно . Настоящий русский Учёный .
Знания бесплатно и бескорыстно -- это про коммунистов, а не про ррррусских. Ведь какой-нибудь буржуй, наживающийся на интеллектуальной собственности, не перестает от этого быть ррррусским буржуем. Верно? Правильно сформулировать: прогрессивный ученый левых взглядов (даже если он сам лепит чушь про какую-то нравственность в лагере праваков). По поступкам товарищ вполне себе марксист. =))
@@Berseny у тебя шлак в голове
@@beria_ Да неужели? А у тебя точно шлака в башке нет? А? Уверен? =) Наивный человечишко. =)
@@Русь-Родина А пока с чужого канала, это не бескорыстно? Нет, ну если ему заплатил кто-то за съемку уроков... Ну хз. Здесь бескорыстность не в том, что человек ничего не получил за свой труд педагога, это был бы альтруизм. Бескорыстие в том, что всеми знаниями вправе воспользоваться всякий человек. Интеллектуальная собственность -- зло!
@@Русь-Родина Являясь достоянием всего человечества, это уже не интеллектуальная собственность, а общечеловеческое богатство. Я имел в виду, конечно же, частную собственность на знания, ну или собственность корпоративную. Ну когда остальные обязаны платить и покупать каждый раз, когда им необходимо, а у продавцов от этого не убывает. Уродливая система капитала, античеловеческая. Сделали из знаний подобие валюты, которая призвана приумножать их капиталы. Причем авторы к этим продажам зачастую не имеют никакого отношения. Они трудились на корпорацию, вот она и присвоила все их наработки. А человек просто раб, получил зарплату и всё! Никакой интеллектуальной ренты, хрен в зубы, и грызи. =) В общем, паразитическая система.
Вы великолепный преподаватель. Смотрю все ваши лекции с превеликим удовольствием и на 6-й лекции могу с уверенностью сказать, что именно этого мне не хватало при кодировании. Я уже пишу на питоне телеграмм ботов и работаю с БД но это все занимало очень много времени так как не всегда было достаточно понимания как это работает. Все конечно же гуглилось но до конца понять, что то все-таки не мог.
почему-то не нашел 6ю лекцию. она еще активна?
@@westend_school ua-cam.com/video/NLq7nB9bV0M/v-deo.html
Спасибо Вам за уроки! Замечательная подача материала!!!
НАСТОЛЬКО ПРОСТЫМ ЯЗЫКОМ И ТАК ИНТЕРЕСНО УВЛЕКАТЕЛЬНО
ПОБОЛЬШЕ БЫ ТАКИХ УЧИТЕЛЕЙ
👍👍👍☝️👍👍👍
- Список как массив данных (1:24):
- Перебор списка по порядку (просто вывод элементов без возможности изменения их в списке): 4:04
- Модель данных в Питоне (как получить доступ к самим объектам в списке и манипулировать ими): 7:48
- Как создавать длинные списки (которые проблематично создавать вручную): 17:27
- Добавление элементов в список с помощью цикла while: 18:58
- Вывод чисел из списка в обратном порядки с помощью цикла for: 23:54
- Удаление элементов из списка: 25:42
- Копирование массива: 27:08
- Сокращенный вариант копирования списка через list: 35:40
- Линейный поиск в массиве: 36:13
- Написание функции тестирования: 39:43
- Алгоритм обращения массива: 49:12
- Добавление эл. в конец и в начало массива: 1:03:03
- Алгоритм циклического сдвига: 1:03:47
- Решето Эратосфена: 1:10:40
И? Это любой студент знает?
мозга кипит, но мне нравится, спасибо Тимофею большое... много вещей, подробно, наглядно, даже вопросов не возникает...
Спасибо Вам за уроки!
Пусть ваша деятельность будет всегда успешной, доброго счастья вам, крепкого здоровья и уважения.
Так, эту лекцию посмотрел, теперь не запутаться, в следующий раз смотреть следующую.
Спасибо тебе Добрый человек за эти лекции
Огромное спасибо за уроки! Вместе с вами учиться намного приятнее и легче)
Тимофей, БРАВО! СПАСИБО! Вы ЛУЧШИЙ преподаватель!!!!
Талант и интелект вот это человек с большой буквы!
Решето Эратосфена гениально расписан на Пайтоне, просто красота, так круто когда на память на доске можешь его написать.
Правильно говорят: "Если преподаватель не может объяснить 6 летнему ребенку, то он сам не разбирается в предмете!". Лекции просто чудо!!! В четко, ясно и понятно.
Очень здорово! Обучение это очень важно, хорошо что вы есть и так хорошо делаете свою работу!
Тернарный особо порадовал. Спс за лекцию.
Спасибо за лекции . Очень познавательный матерьял . Мне как программисту .Вы оказали огромную помощь .
за "шо це таке" на 58:18- отдельный лайк!!!)
На секунды две поздно напсал
не уразумив ы не побачив) шо це такэ?)
а что такое шо це текэ ? из Мариуполя препод
Спасибо за материал и отличную подачу!
Тимофей, вы лучший! Спасибо!
Спасибо! Вы самый лучший преподаватель!
Преподаватель: "Лабы пропускать нельзя"
Я за компом: ....
пользуясь несколько лет срезами на уровне рутины я даже и не выдумывался в такие нужные вещи
Это гениально! Блокбастер по программированию!
препод от бога
лектор очень душевный!
спасибо, Тимофей Фёдорович
Вообще интересное объяснение логичности индексации с нуля. Забавное. Строго говоря во Франции нет нулевых этажей (хотя кнопка ноль в лифте присутствует). Первый этаж в нашем понимании по французски это Rez-de-chaussée произносится что-то вроде Редшосэ и переводится как «рядом с дорогой из известняка» или «на уровне дороги из известняка». Я так понимаю по нашему это земляной пол :). Даже в лохматой древности у нас не было в традиции строить дома с земляным полом, климат не тот. :) Поэтому вероятно у нас всё начинается с первого этажа, а не с нулевого.
58,11
B = [1, 2, 3, 4, 5]
C = [ ]
for k in range (len(B)-1,-1,-1):
C += [B[k]]
for k in range (len(C)):
B[k] = C[k]
Приятно слушать и созерцать!
Во втором гуманитарном корпусе МГУ, где сидит факультет ВМиК 9Вычислительная Математика и Кибернетика), лифт от 0 до 7)))
Лекции класс не возможно уснуть , подписался..
В лектории очень тихо, потому что лекция увлекательная!
Спасибо за прекрасную лекцию)
Комментарий в поддержку контента.
Спасибо, продолжаю изучение с удовольствием)
Спасибо за лекции. Лучшие!!!
23:07 Всё понятно, топ лекция, продолжайте) (молчание - это глубокая заинтересованность)
Последние 8 минут видео сделали мой день...
"Лукавлю я, конечно... Слава Богу, что вы Питон не знаете" 🤣🤣🤣🤝🏻
Ну почему понимаешь, что надо было учиться, когда тебе уже сороковой десяток идёт? Сейчас бы с удовольствием сидела бы среди этих студентов..
Сороковой десяток или все таки четвёртый?
Денис Катанугин Да, долго я необразованная живу)
Stacy Miller не надо вам в программисты ))))))
)
@@danalexpiano программисты не люди))))
В "решете" во втором цикле просева составных чисел в range вместо 2*k лучше использовать k**2. Все до него будут составные, отфильтрованные предыдущими итеррациями
Тимофей Федорович, спасибо Вам большое за публикации своих курсов на ютубе! У меня возникло одно замечание, я его выскажу, не сочтите за неуважение. Я как будто заметил, что некоторые вещи людям непонятны, на первом курсе у студента ветер в голове) да и мне тоже иногда трудно) вот к примеру эти списки, а зачем они вообще нужны? А если непонятно зачем этот инструмент нужен, трудно в нем разобраться. Не лучше ли подавать материал с практической точки зрения? т.е. вот к примеру есть задача с помощью питона проанализировать введеные данные к примеру значения температуры (или я не знаю что еще))), и вот для этого можно применить такую вещь как списки, и вот так-то они устроены и т.д. или же еще на первой лекции можно было поставить задачу написать примитивный калькулятор, и параллельно объяснить все базовые вещи. ну как то так, спасибо)
48:50
Гениально.
1:00:51
Я это ивертирование мучил за пару дней до просмотра видео. И прошёл по всем граблям, что тут показаны.
def reverse_list(lst):
''' разворачивает список
'''
b, n = [], -1
for i in range(len(lst)):
b.append(lst[n])
n -= 1
return b
lst = ['5', '4', '3', '2', '1']
print(reverse_list(lst))
*в конце лекции как всегда "отжигаете"))*
Заинтриговали. Не понял на какой именно минуте и что именно вы имеете в виду.
Для начала, раз Вы мне ответили, хочу поблагодарить Вас за эти лекции. Очень интересно и доступно объясняете. Занимаюсь с удовольствием.
А насчёт "отжигаете", я имел ввиду, что в конце лекций Вы часто в сжатые сроки объясняете сложные моменты :)
И благо, я могу перемотать, посмотреть и обдумать несколько раз. На живой лекции я бы такой роскошью не обладал :)
def make_primes_list(num):
primes = []
sieve = [x for x in range(2, num + 1)]
while sieve:
prime = sieve[0]
primes.append(prime)
sieve = [x for x in sieve if x % prime != 0]
return primes
Более читабельный вариант решета Эратосфена для тех, кто умеет в list comprehensions
1:18:46:
Тернарный оператор рекомендую попробовать так:
(alternative_false, alternative_true)[your_check]
Пример:
('Number is prime', 'Number is complex')[is_number_prime(number)]
Это связано с тем, что True, False преобразуются в цифры 0 и 1, а их можно использовать в качестве индекса.
Сравним эту и тернарную форму:
1. ('Number is complex', 'Number is prime')[is_number_prime(number)]
2. 'Number is prime' if [is_number_prime(number)] else 'Number is prime'
Возможно, дело вкуса. Но мой вариант, мне кажется, выглядит привлекательнее
21:10 Тишина, понятно да? да! значит ничего не понятно)
16:00 с версии Python 3 - PEP рекомендует использовать enumerate, если хотим получать индексы.
Очень интерессно. Спасибо
Чорт! Такой препод, что мне хочется все бросить и бегом программировать, писать самые простые вещи, тупить, ломать голову, снова тупить, решать и дальше дальше дальше. Все четко, системно, понятно, мозги шевелятся.
Не не скучно , а интересно
Такой жирный лайк поставил, что чуть телефон пальцем не раздавил
N =int(input())
A = [True] * N
for i in range(2, N-1):
if A[i]:
print(i)
for j in range(i*i, N-1, i):
A[j] = False
Здесь по другому через квадрат, тоже работает
здоровья Вам.
Блин мужик, ты где такой спинжак отхватил😂👍
Тимофей, ну где ты был (да и я тоже) лет эдак 22 назад? )))) мне бы таких преподов (еще раз повторюсь) в универе, я бы стал точно программистом. А сейчас приходится самообразованием заниматься - что абсолютно несложно несмотря на пройденное время и возраст))) Спасибо и удачи!
1:11:11 решето Эратосфена
Спасибо за материал 🙏
Етитская сила, я наконец-то понял как работает решето Эратосфена!
Очень артистично !)
Шо це таке) Це було прикольно) Ніколи штірліц не був так близько від провалу) ))
Большое Вам спасибо!
Спасибо, преподаватель)))
можно циклический сдвиг осуществлять при помощи деления по модулю, т.о. индекс всегда остается в пределах массива и временная переменная не нужна
def cyclic_shift(N:list):
l = len(N)
for i in range(l - 1):
index = (i + 1) % l
N[i], N[index] = N[index], N[i]
return N
Можно, только не ясно зачем - отказались от временной переменной, получили двукратный рост операций с памятью на каждом шаге цикла. То есть работает дольше, а профит не ясен. Подробнее:
ВАРИАНТ 1 (исходный): на каждой итерации соседняя ячейка тупо затирается новым значением, то есть это операция:
"считать исходное значение в ячейке A ==> сохранить его в ячейку А+1".
О судьбе исходного значения в "А+1" можно не заботиться, так как массив обходим в направлении, противоположном направлению сдвига, а самый первый элемент (который в любом случае будет затерт) сохранили во временную переменную еще до цикла. Останется только по окончании цикла восстановить его из tmp в условно "последнюю" (или "первую") ячейку;
ВАРИАНТ 2 (новый): ради отказа от временной переменной, мы _на каждой итерации_ вынуждены сохранять значение соседней ячейки, так как иначе её содержимое будет утеряно. Вы для этого используете "обмен значениями", но строго говоря это не суть - так или иначе мы получим операции, по нагрузке схожие с:
"считать исходные значения в ячейках А, Б ==> сохранить исходные значения из А, Б в ячейки Б, А".
Даже на вскидку видно, что это в два раза больше на каждом шаге (читаем и А и Б, записываем так же и А и Б). Не явно действий может быть и того больше, так как по факту "обмен значениями переменных" Питон (если угодно Пайтон) также осуществляет через временную переменную, только делает это незаметно для программиста. Об этом в том числе сказано в данных уроках (если не ошибаюсь, в первом, там где речь о базовом синтаксисе объявления/присваивания значений переменных).
В правильном направлении мыслите, только можно сделать обертку над листом, где модом сдвигать только индекс, чуть вырастет время доступа к данным, но записи в них не будет происходить, выигрыш на лицо.
Пока студенты молчат , я разговариваю с ПК ...
Мне кажется, они задумались, а преподаватель пошел вперёд мысли студентов, вроде пытаешься понять, но нужно догонять и не до вопросов
Только из интернета можно узнать какие подвиги совершают учителя. Спасибо.спасбо.спасибо.
58:17 Шо це таке?! XD
подняло настроение)) спасибо большое за видео
Супер преподаватель
@Тимофей Хирьянов, доброго времени суток. В Контесте для групп 737 и 738. Задание D, даётся последовательность чисел, однако в тестах с 6 по 10 дается список. И судя по проверкам, необходимо переместить последний элемент в начало. В самом задании об этом ни чего не сказано. 1-й семестр, 6-я неделя (группы 737-738
@Александр Лагутов Спасибо большое за фидбек! Действительно, в тестах к заданию ошибка. Только это не список, а просто числа даны в строку. Я бы выкинул тесты с 6-го по 10-й или изменил их, но прямо сейчас у меня нет доступа к тестам на этом сервере. Я написал сисадмину с запросом доступа, но пока не могу вам помочь.
Напишите мне персонально в Telegram через несколько дней с копией вашего сообщения. Я могу забыть про эту проблему, а доступ к тому времени мне скорее всего уже дадут.
как же поздно я нашел это(
Ну да
да.
Информатику?
30:00 легче вот так)
from random import randint
N = 5
A = B = [0] * N
for k in range(N):
B[k] = A[k] = randint(0,10) #запихивает рандомные числа в список
Класс!
Можно еще проще: B = A = [randint(0, 10) for _ in range(N)]
А если N прилетает из инпута, то в одну строчку: B = A = [randint(0, 10) for _ in range(int(input()))]
24:45 не "4", а "top - 1"
Тимофей Федорович не незапустил тест на функцию invert_array, а она все равно выдала что test - Failed, так как сравнение для массивов A == B не работате. В этом случае сравнение будет не самих элементов а ссылок на область память, что для разных массивов всегда будет False
решето эратосфена можно сильно ускорить и в два раза сократить выделяемую память, если проверять только нечетные числа (индекс булевого массива = индекс нечетного числа, перевод из индекса в число 2*k+1) и вложенный for начинать не с 2*k, а с k*k, а внешний вести до sqrt(N)
Это уже программистские фишки (оптимизация кода и алгоритма). Вы абстрагируйтесь от того что вы опытный программист, а только что начинающий. А вообще Тимофей Федорович про это заикнулся, но не продолжил.
Классные лекции! Просто "бдыщь" головного мозга!🤪
восхитительно
29:58 Признак хорошего тона - копировать лист через срезы: C = A[:]
лучше использовать метод copy(). Читабельнее
1:02:27 к N//2 в range нужно еще прибавить единицу, иначе итераций цикла будет недостаточно для достижения середины заданного участка списка. Ну и в конце еще нужно дописать, чтО функция будет возвращать, согласно поставленной задаче - фрагмент обращенного списка, определенного числом N. Таким образом, законченное решение будет следующим:
for k in range(N//2 + 1):
A[k], A[N-1-k] = A[N-1-k], A[k]
return A[:N]
А вообще - решение классное. Спасибо, Тимофей Федорович! Я, пока смотрел, поставил на паузу и решил задачу двумя способами:
1. используя метод .reverse(), и применив его к нужному фрагменту списка, определенного числом N:
fragment = A[0:N]
fragment.reverse()
return fragment
2. создавая пустой список и наполняя его в цикле с помощью .append(), инициировав обратный счет от N-1 до -1:
reversed_list = []
for i in range(N-1, -1, -1):
reversed_list.append(A[i])
return reversed_list
Ваш метод был не очевидным, и по этой причине - классным и ценным! Спасибо!!!
Evgeniy Cheremisinov относительно возвращения списка функцией ваше утверждение справедливо только в том случае, если в результате ее работы нас будет интересовать ВЕСЬ обращённый список. Но задача ведь стоит иная: "Обращение массива в рамках индексов от 0 до N-1", т.е. не весь массив, а его часть, отмеченная N. Поскольку N не обязательно будет совпадать с последним индексом списка, возврат участка имеет смысл.
Evgeniy Cheremisinov да, просчитался вчера насчёт единицы. Она там не нужна, спасибо. А насчёт возврата функции - нам же не весь список вроде как нужен, а его фрагмент с начала до N, насколько я понял постановку задачи.
Evgeniy Cheremisinov да, тут все зависит от постановки задачи) я понял иначе. Тем не менее, моя строчка возврата функцией заданного фрагмента обращённого списка добавляет функции универсальности и гибкости, так как позволяет получить результат как в работе с целым списком, так и с его фрагментом)
жаль что у нас такого курса не было изучали а изучали аналоговые ВМ и чуть ЭВМ . классная лекция только для меня очень быстро
A = [1, 2, 4, 7, 10, 13]
for x in A:
x*=x
print(x)
работает
1
4
16
49
100
169
[1, 4, 16, 49, 100, 169]
Если вы имеете ввиду, что вы поменяли таким образом список A, то некоем образом это не работает. Если стоит задача вывести квадраты значений списка А, то да
а допишите в конце print(A) без отступа (то есть не внутри for, а вне цикла) и поймете, что исходный список(массив) A остался прежним.
24:20 "Начиная с top-1", а вместо этого в range пишет 4, что неверно.
1:06:00 Зачем так сложно организовывать циклический сдвиг? Достаточно цикла for со swap'ом соседних элементов.
1:03:00 написал программу, исправил все ошибки и не запустил, не показал что заработала.
В одно месте говорит что итерации цикла считаются с 1, в другом говорит 0-ая итерация
Иногда прыгает с 5-го на 10-е. Не сразу понимаю, что хочет донести. А вообще очень достойно преподает.
Как же эти лекции помогают, пиздец просто
"запукаем.. Що цэ такэ?!"(С)))))
Класс очень интересно смотреть,👍👍👍
Я думаю, что когда в аудитории молчат, то скорее всего это хороший признак, что вся аудитория вовлечена.
Это предположение. Работает навязанный школьными годами стереотип поведения .
@@xinng0n, навязанный стереотип?! А чего тогда в любом (по возрасту и теме) учебном коллективе, когда не интересно, "студенты" начинают отвлекаться, разговаривать, заниматься посторонними делами?!
Я только из интернета понял, что Решето это для поиска простых чисел. Бедные студенты сидели и думали, что там происходит.
Чел, который знает питон: Кто-нибудь, пристрелите меня
Кстати в Польше есть от ... -1,0,1,2,3... этажи!))
Отлично!)