Вот хороший собес, полезный для просмотра. Все объяснили, достаточно глубоко. Собесы с реальными джунами часто не дают хороших ответов на вопросы. Спасибо, полезно!
два профи пообщались) как это поможет джуну на реальном проекте? которому нужна в первую очередь уверенность, а не теория? но такие видео ведут только на очередные ненужные курсы. Почему на курсах не уточняют, что из следующих 10 параметров используют только 1-й, очень редко еще и 2-й. А остальными 8-му не нужно забивать свою оперативку в голове. Но ты зазубрил все 10, но не знаешь даже главной особенности того 1-го, с которым ты и будешь постоянно работать первые 3 года)).
Я офигел... В хорошем смысле слова. Это Тимур Гуев, сейчас прохожу для профиков) Первый раз его увидел и услышал. Пришлось фото загуглить, дыбы не лажануть с комментом. Интересная беседа.
в целом интервью очень приятное. "рядовым программистам комплексные числа никогда не потребуются" -- но при этом пару минут убили на обсуждение... а в сумме на обсуждение float/decimal убили минут пять. интервьюер сильно влюбился в слова "гомо/гетерогенный". к чему бы это ))) всегда поражает, как с одной стороны люди в матрице нули ищут, а с другой -- не знают, что такое "+=". и ещё более забавно, когда человек, писавший на с# говорит, что поведение "+=" неочевидно...
Прошел три курса "Поколения Python" и привык к конкретным ответам, решая задачи. Точно такая задача про словарь из двух списков была у Пронина, я решил прям как на видео. А по итогу сказали надо расширять сознание, и если списки не равны нельзя терять данные. Необходимо при большем количестве ключей использовать например zip_longest. А если остались не используемые значения их например в отдельный список или в отдельный ключ.
Хороший собес! Респект ребятам, которые это делают, молодцы. Еще бы тайм коды на видео добавили - супер чудесно бы было. Сервис для перезентаций тоже понравился
контент хороший раньше не использовал decimal и не знал. для последнего задачи оптимальнее было бы: def foo(m): c = 0 while m and m[0][0] == 0 and (l:=m.pop(0)): l.append(1) c += l.index(1) return c
Привет, понимаю что видео уже как год, но под описанием видео нет ссылки на ресурс посмотреть про +=? Если можно было бы крайне интересно Заранее спасибо
Классный контент, с удовольствием посмотрел. Многое из внутренностей питона для меня оказалось открытием, а задачку в конце я решил за секунды после ее озвучивания. Но я понимаю, что смотрю это спокойно на диване, а в реале мог бы и потеряться. Даже еще бы предложил метод пузырьковой сортировки для более быстрого обегания границы между нулями и единицами. Т.е. найти последний 0 в первой строке и последний 0 в последней строке, посчитать средний наклон спуска по диагонали... Но в 999 из 1000 случаев это на самом деле не нужно. Тем более питон это не про скорость.
А почему не сказано про длинную логику/вычислений, что целые числа обладают неограниченной точностью… Почему в исключениях не привели банальный пример: ctrl + c, было только сказано про ошибки вычислении чего-то
Вот мое исполнение: def count_zeros(arr: list): if len(arr) == 1: return arr[0].count(0) if len(arr[0]) == 1: return len(arr) - sum([x[0] for x in arr]) c = 0 for i in range(min(len(arr), len(arr[0]))): if arr[i][i]: break c += 1 part1 = [row[:c] for row in arr[c:]] part2 = [row[c:] for row in arr[:c]] return c ** 2 + count_zeros(part1) + count_zeros(part2)
Подскажите пожалуйста, сколько лет экзаменуемому и сколько времени он учился. Реально на уверенном, еще и приукрасить успевает, типа 10ка будет преследовать нас как хвост. Весело.
Из 21 минуты объяснение: Просто попробуйте data[0] = data[0] написать в 3й строке. И все станет понятно. Питон не особо смотрит что вы там в кортеж по индексу присваиваите. Даже тот же самый элемент вызовет эксепшн. А строка data[0] = some + super + mega + expression конечно сначала начнет вычисляться с правой части
Ого, вы теперь еще и собесы делаете - вообще респект. А кто ведущий? Не шахматный ли человек-матрица, случаем? :D P.S. А Эдуарду респект - сразу видно, что разбирается во внутрянке Питона. Зачет.
Задача с матрицей Ментр сообщает, что можно работать с индексами Тогда почему нельзя представить матрицу как typle a = ((0, 0, 1, 1), (0, 0, 1, 1), (0, 1, 1, 1), (1, 1, 1, 1)) summ = 0 а для подсчета сделать так? for i in a: summ += i.index(1) тут ведь так же сложность линеная
на сколько я знаю, сложность метода index() - O(n) в худшем случае, так как элемент с искомым индексом может быть в самом конце списка(кортежа) и в общем, в худшем случае, цикл for дает нам сложность O(n) и поиск индекса 1 нам тоже дает O(n). В сумме будет O(n2) ну или O(n * m) если матрица не квадратная.
Про finally и отключение э-ва. Скорость света 300000 км/с. Или 300 км за 1 мс (милисекунду) - Если, допустим, электростанция находится от нас в 3000 км и на ней произошла авария, то свет у нас погаснет только через 10 мс. И если наш код выполняется быстрее, чем 10 мс - то finally имеет шансы быть выполненным.
@@Nina-hy4ql т.к. вопросы про азы, ну почти, и про фреймворки ничего не спросили, + задака на алогритмы не сложная, хотя, как уже сказано, это не собес)
я вот тоже смотрел - и подумал, что его потуги решить ту задачу как-то не гармонируют с тем, что он показал ранее) А еще подумал что то, что они отсортированы по вертикали н6е имеет значения.
Как я решил задачу с матрицей: def count_zeros(m): c = 0 i = len(a[0]) for x in a: i = x[0:i].count(0) c += i return c В каждой строке количество нулей (которые только в начале) не больше, чем в предыдущей, таким образом, мы постепенно будем проверять все меньшую и меньшую часть (срез) строки, так как всю строку проверять смысла нет. Я не сделал никаких проверок на единицу в цикле, так как(по моему мнению) сами эти проверки отнимают время. Подскажите, какую скорость имеет данный алгоритм?
Это вообще работать не будет, поскольку "а" не определено. Ну и сложность О(n**2), потому что в цикле for на каждой итерации count, что тоже является циклом. Итого, цикл в цикле.
Самое печальное в этом всем то, что на реальной работе знания 90% этих вопросов если и понадобятся, то один раз в жизни. А углубленная информация скорее всего не понадобится никогда. Но чтоб пройти собеседование знать это надо и чем глубже тем лучше.
Не совсем понял чем не угодил проход циклами по всем строкам матрицы для выявления всех нулей. Сколько раз я уже видел такое, да код красивый, но черт ногу сломит в логике, вместо того что бы написать на 2 строки больше но зато все понятно как в азбуке. Никогда не понимал этого.
потому что суть задачек на алгоритмы не в том чтобы проверить как код в проде ты будешь писать, а именно что проверить смекалку, навыки именно в алгосах и структурах данных
@@rednil8242 Так а это чем не алгоритм с циклом то? я помню когда начинал учить питон столько велосипедов ненужных , работающих, но соверншенно ненужных, поизобретал что боольше чет и не хочется.
@@Anshegar тем что до него додумываться почти что не надо задачка и так изи-медиум, смысл не показать что кандидат просто цикл умеет писать, но в том что догадается до оптимального решения. буквально вчера с этим на собесе столкнулся, с квадратичной сложности до линейной оптимизировал.
С листами и кортежами слишком оверлоад. Не правильно так делать. Это лишь две "почти одинаковые структуры данных" Динамические масив для листа и статический для кортежа. И от туда уже выходит их юз кейс. Человек ответил что итерация через кортеж быстрее что не являеться правдой. ВО первых бенчмарк написать 30 секунд и посмотреть что они одинаковые и даже чаще выигрывает лист(но это зависит от рантайма). Второе чисто знать их структуру что тоже дает ответ что в инетрации как и аксесе нету быстрее или медленее. Пустую аллокацию лист не итерирует.
О хэш таблице. Человек рассказал о старом представлении хэш таблиц в пайтоне. + не рассказано о пробации\колизия\решению кол и тд. Тема очень глубокая. И если уже упоминать у то что знаешь глубь то или рассказывать детально или вообще не рассказывать а то порождает только непонимание.
Во-первых, это не нанимаете на работу, а MOCK собеседование. Во-вторых, если вы не знаете, что происходит под капотом, то в некоторых ситуациях консоль вам не поможет решить проблему. И знать как всё устроенно внутри, куда полезнее, чем бездумно писать код.
@@A.AA.A-qo6tw я всегда смотрю консоль и в 100% всегда решаю сложные задачи. В любом другом случае все уже решено и нужно искать ответ в интернете. Либо читать документацию.
def count_zeros(mat): zeroes = 0 for i in range(len(mat)): for j in range(len(mat[i])): if mat[i][j] == 0: zeroes += 1 else: break return zeroes так красивее , нет ?
39:52 Проверил в VS code, вывело это: [10, 'a'] [123] [10, 'a'] Собственно, получается Тимур неправильно сказал, что в первом выводе будет только 10. Или в чем проблема?
@@A.AA.A-qo6tw так задача стоит что выведет код, и вывело собственно, то что я написал. А не то что сначала выведет первый принт, второй и третий, и почему так произошло, если вывести сразу все.
И прямо со старта... >>> import decimal >>> a = decimal.Decimal(0.3) >>> b = decimal.Decimal(0.1) >>> a + a + a + b Decimal('0.9999999999999999722444243843') >>> >>> 0.3 + 0.3 + 0.3 + 0.1 0.9999999999999999 >>> Разницы в результате тупо нет, те же самые 16 девяток после точки, а потом неестественный хвост как бы приклеен. Ну, раз кому-то неправильный результат с колбасой в 28 знаков милее -- дело хозяйское. В данном случае "точность" означает "подробность", но никак не "правильность". Что в регистрах, что в ячейках оперативки одна и та же двоичная система, иначе и быть не может. Так что если считать десятичные дроби, нужен не компьютер, а калькулятор. И кортеж со списком длиной даже в миллион -- при линейном чтении разница в районе седьмого-восьмого знака после точки. А поиск элемента по индексу / индекса по значению в коллекции на 10 тысяч оказался тоже весьма неоднозначным. import random lst = [*range(10000)] random.shuffle(lst) tpl = tuple(lst) indexes = [*range(10000)] random.shuffle(indexes) @halt def list_item_by_index(): for x in indexes: a = lst[x] @halt def list_index_of_item(): for x in indexes: a = lst.index(x) @halt def tuple_item_by_index(): for x in indexes: a = tpl[x] @halt def tuple_index_of_item(): for x in indexes: a = tpl.index(x) list_item_by_index(), list_index_of_item() tuple_item_by_index(), tuple_index_of_item() Результаты: list_item_by_index time: 00 h 00 min 0.00274250 s list_index_of_item time: 00 h 00 min 1.06715661 s tuple_item_by_index time: 00 h 00 min 0.00153810 s tuple_index_of_item time: 00 h 00 min 1.17664792 s Ну и создание кортежа командой tuple из генератора тоже медленнее, чем comprehension. А что там насчёт преимуществе кортежа по памяти? >>> tuple([*range(1000000)]).__sizeof__() 8000024 >>> [*range(1000000)].__sizeof__() 8000040 >>> Есть разница))) Но это надо создавать списки/кортежи длиной в 1-3 элемента, а числом в легионы, чтобы профит ощутить.
13:00 "однотипность"... Сразу вспоминается функция all, которая любую пустую коллекцию (во всём остальном Питоне это False и даже для "напарницы" этой функции any) и заодно пустую строку воспринимает как True. Знаете, почему? А потому что "если в комнате нет ни одного человека, то можно утверждать, что каждый человек из находящихся в комнате -- француз. Или женщина". Я не шучу ни грамма. Это известное логическое утверждение называется "парадокс остроумного француза" (The Paradox of the Clever Frenchman) или "парадокс одинокого француза" (The Paradox of the Lonely Frenchman). А потому что в Нидерландах хорошие наркотики, вот почему. 16:30 "список, его хэш-значение..." >>> s = [1, 2] >>> hash(s) Traceback (most recent call last): File "", line 1, in TypeError: unhashable type: 'list' Действительно.
Ребята, ну выучите, наконец, как правильно произносить else и прочие английские слова! Так режет ухо, что хочется спросить кто вас так научил? Или сами решили за англичан так произносить? А самое страшное, что свою неграмотность вы ещё и мультиплицируете!
Очередное тупое собеседование. Важны не знания основ, а мышление программиста. Выучить язык при необходимости ума большого не надо, а вот интеллект важен всегда. Короче, очередной эйчаровский тупизм.
Вот хороший собес, полезный для просмотра. Все объяснили, достаточно глубоко. Собесы с реальными джунами часто не дают хороших ответов на вопросы. Спасибо, полезно!
два профи пообщались) как это поможет джуну на реальном проекте? которому нужна в первую очередь уверенность, а не теория?
но такие видео ведут только на очередные ненужные курсы.
Почему на курсах не уточняют, что из следующих 10 параметров используют только 1-й, очень редко еще и 2-й. А остальными 8-му не нужно забивать свою оперативку в голове. Но ты зазубрил все 10, но не знаешь даже главной особенности того 1-го, с которым ты и будешь постоянно работать первые 3 года)).
Я думал парня на синьора собеседуют, а потом «ну когда найдешь свою первую работу..»
в поддержку канала ) надеемся на, то, что народ поддержит эту работу)
Я офигел... В хорошем смысле слова. Это Тимур Гуев, сейчас прохожу для профиков) Первый раз его увидел и услышал. Пришлось фото загуглить, дыбы не лажануть с комментом. Интересная беседа.
Таких бы видосов побольше.Тема собесов очень важна
Отличное видео, очень полезная информация и очень грамотно раскрыто, узнал для себя некоторые новые моменты)
Два знакомых решили выступить каждый в своей роли 😅
Очень глубокий, качественный разговор.
Парни, я как раз сейчас прохожу ваш курс для новичков))
привет, привет. открыл видео на этом канале в первый раз и уже участник команды)))
в целом интервью очень приятное.
"рядовым программистам комплексные числа никогда не потребуются" -- но при этом пару минут убили на обсуждение... а в сумме на обсуждение float/decimal убили минут пять.
интервьюер сильно влюбился в слова "гомо/гетерогенный". к чему бы это )))
всегда поражает, как с одной стороны люди в матрице нули ищут, а с другой -- не знают, что такое "+=". и ещё более забавно, когда человек, писавший на с# говорит, что поведение "+=" неочевидно...
Прошел три курса "Поколения Python" и привык к конкретным ответам, решая задачи. Точно такая задача про словарь из двух списков была у Пронина, я решил прям как на видео. А по итогу сказали надо расширять сознание, и если списки не равны нельзя терять данные. Необходимо при большем количестве ключей использовать например zip_longest. А если остались не используемые значения их например в отдельный список или в отдельный ключ.
Очень полезное интервью и разбор вопросов. Спасибо за такое развернутое видео! Продолжайте в таком же духе!
Хороший собес! Респект ребятам, которые это делают, молодцы. Еще бы тайм коды на видео добавили - супер чудесно бы было. Сервис для перезентаций тоже понравился
контент хороший раньше не использовал decimal и не знал.
для последнего задачи оптимальнее было бы:
def foo(m):
c = 0
while m and m[0][0] == 0 and (l:=m.pop(0)):
l.append(1)
c += l.index(1)
return c
Привет, понимаю что видео уже как год, но под описанием видео нет ссылки на ресурс посмотреть про +=?
Если можно было бы крайне интересно
Заранее спасибо
Класс, обязательно посмотрю:)
Я не понял - кто кого собеседовал...
Наиграно
Они геи😊
Классный контент, с удовольствием посмотрел. Многое из внутренностей питона для меня оказалось открытием, а задачку в конце я решил за секунды после ее озвучивания. Но я понимаю, что смотрю это спокойно на диване, а в реале мог бы и потеряться. Даже еще бы предложил метод пузырьковой сортировки для более быстрого обегания границы между нулями и единицами. Т.е. найти последний 0 в первой строке и последний 0 в последней строке, посчитать средний наклон спуска по диагонали... Но в 999 из 1000 случаев это на самом деле не нужно. Тем более питон это не про скорость.
А почему не сказано про длинную логику/вычислений, что целые числа обладают неограниченной точностью…
Почему в исключениях не привели банальный пример: ctrl + c, было только сказано про ошибки вычислении чего-то
шикарное интервью, больше похоже на интересную дискуссию
Полезное видео. Спасибо!!!!
Вот мое исполнение:
def count_zeros(arr: list):
if len(arr) == 1:
return arr[0].count(0)
if len(arr[0]) == 1:
return len(arr) - sum([x[0] for x in arr])
c = 0
for i in range(min(len(arr), len(arr[0]))):
if arr[i][i]:
break
c += 1
part1 = [row[:c] for row in arr[c:]]
part2 = [row[c:] for row in arr[:c]]
return c ** 2 + count_zeros(part1) + count_zeros(part2)
Подскажите пожалуйста, сколько лет экзаменуемому и сколько времени он учился. Реально на уверенном, еще и приукрасить успевает, типа 10ка будет преследовать нас как хвост. Весело.
Из 21 минуты объяснение:
Просто попробуйте data[0] = data[0] написать в 3й строке. И все станет понятно. Питон не особо смотрит что вы там в кортеж по индексу присваиваите. Даже тот же самый элемент вызовет эксепшн. А строка data[0] = some + super + mega + expression конечно сначала начнет вычисляться с правой части
в матрицах в первом проходе можно и бинарным поиском найти) но это так, в порядке интереса
Классные у вас курсы ребят, именно благодаря ним и выучил питон
Ого, вы теперь еще и собесы делаете - вообще респект.
А кто ведущий? Не шахматный ли человек-матрица, случаем? :D
P.S. А Эдуарду респект - сразу видно, что разбирается во внутрянке Питона. Зачет.
Задача с матрицей
Ментр сообщает, что можно работать с индексами
Тогда почему нельзя представить матрицу как typle
a = ((0, 0, 1, 1), (0, 0, 1, 1), (0, 1, 1, 1), (1, 1, 1, 1))
summ = 0
а для подсчета сделать так?
for i in a:
summ += i.index(1)
тут ведь так же сложность линеная
чувак, кажется ты гений
на сколько я знаю, сложность метода index() - O(n) в худшем случае, так как элемент с искомым индексом может быть в самом конце списка(кортежа) и в общем, в худшем случае, цикл for дает нам сложность O(n) и поиск индекса 1 нам тоже дает O(n). В сумме будет O(n2) ну или O(n * m) если матрица не квадратная.
Приветствую. Как называется плагин автозаполнения для Pycharm ? Стандартно он вроде не так работает.
Рубрика огонь)) Больше подобных видосов Тимур)
такое решение подойдет для последней задачи?
def count_zeros(n):
c = 0
for i in n:
for j in i:
if j == 1:
break
else:
c += 1
return c
Тоже так подумал сразу
Про finally и отключение э-ва. Скорость света 300000 км/с. Или 300 км за 1 мс (милисекунду) - Если, допустим, электростанция находится от нас в 3000 км и на ней произошла авария, то свет у нас погаснет только через 10 мс. И если наш код выполняется быстрее, чем 10 мс - то finally имеет шансы быть выполненным.
join у str написан на плюсах? Вы уверены?
Tough guys. Really.
шедевро питон
я постоянно складываю кортежи и суммирую кортеж, нахожу минимум, максимум. Я крайне редко пользуюсь списками. хватает корежа и генератора
привет, а где страничка обещанная на 20:06 страничка?
Это точно на Джуна собес😮?
А где написано, что на джуна?)
@@Nina-hy4ql т.к. вопросы про азы, ну почти, и про фреймворки ничего не спросили, + задака на алогритмы не сложная, хотя, как уже сказано, это не собес)
Не увидел ссылку, которую говорил, что кинешь на 21.15мин, или просто не нашел
видимо перенервничал Эдуард, на последнюю задачку можно было так же легко сделать с ходу используя индексы))) sum(row.index(1) for row in matrix)
я вот тоже смотрел - и подумал, что его потуги решить ту задачу как-то не гармонируют с тем, что он показал ранее)
А еще подумал что то, что они отсортированы по вертикали н6е имеет значения.
Сложность этого решения - O(n^2) в худшем случае
Как я решил задачу с матрицей:
def count_zeros(m):
c = 0
i = len(a[0])
for x in a:
i = x[0:i].count(0)
c += i
return c
В каждой строке количество нулей (которые только в начале) не больше, чем в предыдущей, таким образом, мы постепенно будем проверять все меньшую и меньшую часть (срез) строки, так как всю строку проверять смысла нет.
Я не сделал никаких проверок на единицу в цикле, так как(по моему мнению) сами эти проверки отнимают время.
Подскажите, какую скорость имеет данный алгоритм?
Это вообще работать не будет, поскольку "а" не определено. Ну и сложность О(n**2), потому что в цикле for на каждой итерации count, что тоже является циклом. Итого, цикл в цикле.
А где ссылка на статью про +=?
def foo(matrix):
return len([i for sublist in matrix for i in sublist if i == 1] )
Нужно найти количество нулей в матрице - простой проход по матрице будет выполняться за O(n). Где тут квадратичная сложность?
Самое печальное в этом всем то, что на реальной работе знания 90% этих вопросов если и понадобятся, то один раз в жизни. А углубленная информация скорее всего не понадобится никогда. Но чтоб пройти собеседование знать это надо и чем глубже тем лучше.
Почему слишком лёгкие вопросы?
Не совсем понял чем не угодил проход циклами по всем строкам матрицы для выявления всех нулей. Сколько раз я уже видел такое, да код красивый, но черт ногу сломит в логике, вместо того что бы написать на 2 строки больше но зато все понятно как в азбуке. Никогда не понимал этого.
потому что суть задачек на алгоритмы не в том чтобы проверить как код в проде ты будешь писать, а именно что проверить смекалку, навыки именно в алгосах и структурах данных
@@rednil8242 Так а это чем не алгоритм с циклом то? я помню когда начинал учить питон столько велосипедов ненужных , работающих, но соверншенно ненужных, поизобретал что боольше чет и не хочется.
@@Anshegar тем что до него додумываться почти что не надо
задачка и так изи-медиум, смысл не показать что кандидат просто цикл умеет писать, но в том что догадается до оптимального решения. буквально вчера с этим на собесе столкнулся, с квадратичной сложности до линейной оптимизировал.
К собеседованию ни какого отношения не имеет. Ни один, ни второй не программисты.
всмысле?
Всегда же надо какую-то ерунду написать 🤣
Что за бред вообще? Обиделся, потому что не смог бы сам ответить на те же вопросы?
7:40 он реально сматерился?😮
если сейчас такие джуны, то я сочувствую тем кто пытается войти в айти) чувак тянет на мидл + пятилетней давности
Хоть кто-то пожалел, спасибо)
2:47 в банковских системах обычно используют integer, и там нет такого понятия, как копейки и тому подобное
все верно. Оперируют в минимальных единицах валюты: копейки, центы, тенге. И никаких плавающих точек не нужно
С листами и кортежами слишком оверлоад. Не правильно так делать. Это лишь две "почти одинаковые структуры данных" Динамические масив для листа и статический для кортежа. И от туда уже выходит их юз кейс. Человек ответил что итерация через кортеж быстрее что не являеться правдой. ВО первых бенчмарк написать 30 секунд и посмотреть что они одинаковые и даже чаще выигрывает лист(но это зависит от рантайма). Второе чисто знать их структуру что тоже дает ответ что в инетрации как и аксесе нету быстрее или медленее. Пустую аллокацию лист не итерирует.
О хэш таблице. Человек рассказал о старом представлении хэш таблиц в пайтоне. + не рассказано о пробации\колизия\решению кол и тд. Тема очень глубокая. И если уже упоминать у то что знаешь глубь то или рассказывать детально или вообще не рассказывать а то порождает только непонимание.
🤟
Помимо лайка, добавлю комментарий)
Постановка
Почему?
моковое интервью же
хороший собес
еееееееееееееееееееееееее!!!!!!!!!!!!
шарлотан
Рассказано все классно, но чувствуется что это одна зубрежка
А как иначе?)
картежИ, без кортежЕй )) аж слух режет.
Нафига думать если есть консоль, с такими работодателями даже не общаюсь.
Во-первых, это не нанимаете на работу, а MOCK собеседование. Во-вторых, если вы не знаете, что происходит под капотом, то в некоторых ситуациях консоль вам не поможет решить проблему. И знать как всё устроенно внутри, куда полезнее, чем бездумно писать код.
@@A.AA.A-qo6tw я всегда смотрю консоль и в 100% всегда решаю сложные задачи. В любом другом случае все уже решено и нужно искать ответ в интернете. Либо читать документацию.
def count_zeros(mat):
zeroes = 0
for i in range(len(mat)):
for j in range(len(mat[i])):
if mat[i][j] == 0:
zeroes += 1
else:
break
return zeroes
так красивее , нет ?
так квадратичная сложность
def count_zeros(matrix):
return sum(i.index(1) if 1 in i else len(i) for i in matrix)
39:52 Проверил в VS code, вывело это:
[10, 'a']
[123]
[10, 'a']
Собственно, получается Тимур неправильно сказал, что в первом выводе будет только 10. Или в чем проблема?
Гений, смотри хотя-бы когда копируешь код, операции уже произошли и ты выводишь грубо говоря 2 списка, а не 3.
Хоть return и возвращает список, но функция на него продолжает ссылаться и в итоге в 3 её вызове список увеличивается и в list1 также.
@@A.AA.A-qo6tw так задача стоит что выведет код, и вывело собственно, то что я написал. А не то что сначала выведет первый принт, второй и третий, и почему так произошло, если вывести сразу все.
@@kostechkaS думаю, что суть данного вопроса состояло не тупо ответить, что выведет, а именно механизм работы в данном случае.
кортЕжи
никогла не понимал, зачем на инженерном языке решать алгозадачи, вам java мозги жмёт?
27:40 какая компеляция? он о чем? питон интерпритируемый, там все во время выполнения делается
А что у нас хранится в папке pycache?)
И прямо со старта...
>>> import decimal
>>> a = decimal.Decimal(0.3)
>>> b = decimal.Decimal(0.1)
>>> a + a + a + b
Decimal('0.9999999999999999722444243843')
>>>
>>> 0.3 + 0.3 + 0.3 + 0.1
0.9999999999999999
>>>
Разницы в результате тупо нет, те же самые 16 девяток после точки, а потом неестественный хвост как бы приклеен. Ну, раз кому-то неправильный результат с колбасой в 28 знаков милее -- дело хозяйское. В данном случае "точность" означает "подробность", но никак не "правильность". Что в регистрах, что в ячейках оперативки одна и та же двоичная система, иначе и быть не может. Так что если считать десятичные дроби, нужен не компьютер, а калькулятор.
И кортеж со списком длиной даже в миллион -- при линейном чтении разница в районе седьмого-восьмого знака после точки. А поиск элемента по индексу / индекса по значению в коллекции на 10 тысяч оказался тоже весьма неоднозначным.
import random
lst = [*range(10000)]
random.shuffle(lst)
tpl = tuple(lst)
indexes = [*range(10000)]
random.shuffle(indexes)
@halt
def list_item_by_index():
for x in indexes:
a = lst[x]
@halt
def list_index_of_item():
for x in indexes:
a = lst.index(x)
@halt
def tuple_item_by_index():
for x in indexes:
a = tpl[x]
@halt
def tuple_index_of_item():
for x in indexes:
a = tpl.index(x)
list_item_by_index(), list_index_of_item()
tuple_item_by_index(), tuple_index_of_item()
Результаты:
list_item_by_index time:
00 h 00 min 0.00274250 s
list_index_of_item time:
00 h 00 min 1.06715661 s
tuple_item_by_index time:
00 h 00 min 0.00153810 s
tuple_index_of_item time:
00 h 00 min 1.17664792 s
Ну и создание кортежа командой tuple из генератора тоже медленнее, чем comprehension. А что там насчёт преимуществе кортежа по памяти?
>>> tuple([*range(1000000)]).__sizeof__()
8000024
>>> [*range(1000000)].__sizeof__()
8000040
>>>
Есть разница))) Но это надо создавать списки/кортежи длиной в 1-3 элемента, а числом в легионы, чтобы профит ощутить.
13:00 "однотипность"... Сразу вспоминается функция all, которая любую пустую коллекцию (во всём остальном Питоне это False и даже для "напарницы" этой функции any) и заодно пустую строку воспринимает как True. Знаете, почему? А потому что "если в комнате нет ни одного человека, то можно утверждать, что каждый человек из находящихся в комнате -- француз. Или женщина". Я не шучу ни грамма. Это известное логическое утверждение называется "парадокс остроумного француза" (The Paradox of the Clever Frenchman) или "парадокс одинокого француза" (The Paradox of the Lonely Frenchman). А потому что в Нидерландах хорошие наркотики, вот почему.
16:30 "список, его хэш-значение..."
>>> s = [1, 2]
>>> hash(s)
Traceback (most recent call last):
File "", line 1, in
TypeError: unhashable type: 'list'
Действительно.
ЭлсЭ, прям коробит от этого косноязычия!! Else [els] Откройте словарь, все названия идут из английского. ну реально невозможно это слушать
Это не урок по английскому, чтобы придераться к произношению. Да, английский полезная вещь, но всё же, имейте терпение и уважение к чужому труду.
Ребята, ну выучите, наконец, как правильно произносить else и прочие английские слова! Так режет ухо, что хочется спросить кто вас так научил? Или сами решили за англичан так произносить? А самое страшное, что свою неграмотность вы ещё и мультиплицируете!
Очередное тупое собеседование.
Важны не знания основ, а мышление программиста.
Выучить язык при необходимости ума большого не надо, а вот интеллект важен всегда.
Короче, очередной эйчаровский тупизм.
как без знания тонкостей языка писать эффективный код?