Почему все собеседования однотипные и далеки от жизни: реши алго задачку(причем пиши код в каком-то текстовом редакторе) расскажи теорию по языку. Практически никто не спрашивает про CI/CD, Docker, Kubernetes(хотя бы поверхностно) какие есть проблемы у данных технологии/почему их стоит использовать и тд и тп. На одном языке практически ничего невозможно сделать…
50:23 надо минимальную разницу от среднего значения брать. Выяснить индекс минимального значения и удалить из списка ФИО по индексу. А так, я бы через словари реализовал. Но я бы также переволновался и тупил😅 Мишутка, 2й месяц изучения пайтона с нуля ;)
Спасибо за видео. Но я не понял. Это реальное интервью? Я так понимаю, что этих знаний не достаточно, для получение работы. В тестовых заданиях ведь не только python, но и Django , docker и прочее.
@@MrBeltalowda я это понимаю. Я по другое. Почекай вакансии там нигде не написано, что знание питона. Везде связка с Django и подобными библиотеками. Это ещё нужно выучить Джанго, HTML, CSS, базы данных и прочее.
Django , docker и прочее это инструменты , сегодня Django завтра что то другое , а пайтон это база , без него ты этими инструментами пользоваться не сможешь
На сколько я понял, что речь про количество букв в фамилии, а если будет, например, в отсортированном списке [5, 5, 6, 7, 8, 11](речь про количество букв в фамилии), то средний элемент по количеству букв это 8, а в середине списка 6 или 7, то ответ будет не правильным или нет? Как я понимаю, задача на то как человек будет подходить к задаче и как он думает какие уточняющие вопросы задает и т.д.
Подопытный Иван всё-таки решил эту задачу таким образом: from typing import List fio = """Иванов И. И.
Смирнович П. П.
Ким Ю. Л.""" fio_list = [fio for fio in sorted(fio.split(' ')) if fio] def remove_avg_surname(fio_lst: List[str]) -> List[str]: """Удаление ФИО из списка, длина фамилии которого близка к среднему значению длин фамилий остальных ФИО. """ if not fio_lst or type(fio_lst) is not list: return [] # Считаем длину каждой фамилии в списке ФИО surnames_len = [(len(fio.split()[0]), fio) for fio in fio_lst] # Находим среднюю длину фамилий avg_len = sum(map(lambda x: x[0], surnames_len)) // len(surnames_len) # Находим отклонение длины каждой фамилии от средней длины deltas = [(abs(avg_len - surn[0]), surn[1]) for surn in surnames_len] # Получаем самую первую фамилию с минимальным отклонением avg_surname = sorted(deltas, key=lambda x: x[0])[0][1] # Удаляем ФИО из исходного списка fio_lst.remove(avg_surname) return fio_lst
И тесты для проверки: assert remove_avg_surname([]) == [] assert remove_avg_surname('не список') == [] assert remove_avg_surname(['Чапаев В. И.']) == [] assert remove_avg_surname( ['Ивановов И. И.', 'Смирнович П. П.', 'Ким Ю. Л.'] ) == ['Смирнович П. П.', 'Ким Ю. Л.'] assert remove_avg_surname( ['Смирнович П. П.', 'Ким Ю. Л.', 'Велес И. И.'] ) == ['Смирнович П. П.', 'Ким Ю. Л.'] assert remove_avg_surname( ['Смирнович П. П.', 'Кимченко Ю. Л.', 'Велес И. И.'] ) == ['Смирнович П. П.', 'Велес И. И.'] assert remove_avg_surname( ['Кимченко Ю. Л.', 'Велес И. И.'] ) == ['Кимченко Ю. Л.'] assert remove_avg_surname( ['Биба Ю. Л.', 'Боба И. И.'] ) == ['Боба И. И.'] assert remove_avg_surname( ['Боба И. И.', 'Биба Ю. Л.'] ) == ['Биба Ю. Л.'] assert remove_avg_surname( ['Боба Я. И.', 'Боба Ю. Л.'] ) == ['Боба Ю. Л.'] assert remove_avg_surname( ['Шу И. И.', 'Шуб Ю. Л.', 'Шуба Ю. Л.', 'Шубад Ю. Л.', 'Шубадубадубаев Ю. Л.'] ) == ['Шу И. И.', 'Шуб Ю. Л.', 'Шуба Ю. Л.', 'Шубадубадубаев Ю. Л.'] assert remove_avg_surname( ['Шу И. И.', 'Шубадубадубаев Ю. Л.'] ) == ['Шубадубадубаев Ю. Л.']
Добрый день. Какую фамилию нужно удалить из этого перечня? fio = """Шу И. И.
Шубад Ю. Л.
Шубаду Ю. Л.
Шуб Ю. Л.
Шуба Ю. Л.
Шубадубадубаев Ю. Л.""" По этим расчетам (2 + 3 + 4 + 5 + 6 + 14) / 6 = 5.67 нужно удалить фамилию с шестью буквами. Ваш код так работает? Если что, не пытаюсь уличить вас в ошибке. Мой код работает иначе, и хочется понять, как правильно)
@@dmitrikolesnikov9762 Привет! В основном так, но у меня идёт целочисленное деление. Поэтому вместо 5.67 (что логично округлить до 6) у меня бы средняя длина фамилии в этом примере была равна 5. Поэтому, по моему коду должна удалиться фамилия - Шубад. Ну а вообще ты хороший пример привёл, который показывает, что с математической точки зрения было бы правильнее округлять до 6 и удалить фамилию - Шубаду. Поэтому в этой задаче всё зависит от способа округления. Самое прикольное в том, что не надо было так заморачиваться и Андрей вообще ожидал от меня решение типа "в отсортированном списке удалить средний по индексу или ближайший к нему элемент", что делается в две строчки кода, но меня куда-то не в ту степь понесло.
Решение с фамилией, длина которой ближе к середине. Ближе это не значит +- в обе стороны, это значит максимально близко. Решение,, список отсортирован уже по длине фамилий: new_surname = sorted(list(map(lambda x: x.split(), arra)), key=lambda x:len(x[0])) while len(new_surname) > 1: new_surname.pop(new_surname.index(max(new_surname, key=lambda x:len(x[0])))) new_surname.pop(new_surname.index(min(new_surname, key=lambda x:len(x[0])))) print(f' result {new_surname}')
Черемисинов Михаил Денисович''' def func(txt): txt = txt.split('
') txt = sorted(txt, key=lambda x: len(x.split()[0])) return [x for x in txt if txt.index(x) != len(txt)//2] вроде работает p.s Курсы не проходил , учусь из интернета пару месяцев. Не судите строго
Решение не является правильным. Ниже объясняю пример. print(func('Шу И. И.
Шуб Ю. Л.
Шуба Ю. Л.
Шубад Ю. Л.
Шубадубадубаев Ю. Л.')) Здесь у нас пять фамилий. Средняя длина этих пяти фамилий равна 5, т.к. ((2+3+4+5+14) // 5) == 5 Следовательно, мы должны удалить фамилию "Шубад", которая ближе всего к среднему значению длин всех фамилий. Но по логике твоего алгоритма, мы удалим человека с фамилией "Шуба"
') txt = sorted(txt, key=lambda x: len(x.split()[0])) average = sum([len(x) for x in txt]) // len(txt) return [x for x in txt if len(x) != average] получается что так?
''' Надо убрать переносы строк в списке полных имён, отсортировать список полных имён по алфавиту и написать функцию, которая должна удалять из изначального массива отсортированных полных имён то полное имя, длина фамилии которого равна или близка к значению средней длины всех фамилий в ней. ''' fullname_list = '''Бабинець Ринат Германович
Жебраков Иван Максимович
Муханкин Виталий Вадимович
Перфирьев Руслан Константинович
Табачник Ян Ефимович
Тинаев Виталий Викторович
Цизин Ринат Валентинович
Черемисинов Михаил Денисович''' sorted_fullname_list = sorted(fullname_list.split('
')) def process_sorted_fullname_list(sorted_fullname_list: list[str]) -> list[str]: surnames = [sorted_fullname.split()[0] for sorted_fullname in sorted_fullname_list] surnames_lengths = [len(surname) for surname in surnames] average_surnames_lengths = round(sum(surnames_lengths) / len(surnames_lengths)) differences = [abs(len(surname) - average_surnames_lengths) for surname in surnames] min_difference = min(differences) return [fullname for fullname, difference in zip(sorted_fullname_list, differences) if difference != min_difference] def process_sorted_fullname_list_2(sorted_fullname_list: list[str]) -> list[str]: surnames_lengths = [] differences = []
for sorted_fullname in sorted_fullname_list: surnames_lengths.append(len(sorted_fullname.split()[0])) average_surnames_lengths = round(sum(surnames_lengths) / len(surnames_lengths)) differences.append(abs(len(sorted_fullname.split()[0]) - average_surnames_lengths)) return [fullname for fullname, difference in zip(sorted_fullname_list, differences) if difference != min(differences)] print(process_sorted_fullname_list(sorted_fullname_list)) print(process_sorted_fullname_list_2(sorted_fullname_list)) У меня возникла дилемма: Первая функция проигрывает по памяти, но выигрывает по скорости. Вторая функция проигрывает по скорости, но выигрывает по памяти. Какая функция более эффективная и почему? Сам склоняюсь к первой.
") last_names = [name.split()[0] for name in full_names] average_length = sum([len(last_name) for last_name in last_names]) / len(last_names) min_diff = min([abs(len(last_name) - average_length) for last_name in last_names]) last_names = [last_name for last_name in last_names if abs(len(last_name) - average_length) > min_diff] return [name for name in full_names if name.split()[0] in last_names]
Решение задачи с именами в одну строку: def func(): return sorted([' '.join(names.split()[i - 3:i]) for i in range(3, len(names.split()), 3)], key=lambda x: x[0])
Иван молодец, так держать!
приятный парень, особенно на фоне кандидатов из предыдущих видео по скиллу.
Убила фраза ‘не дай бог, читать ’ )
Блен, я бы с радостью тоже на собес залетел, чисто знания затестить, но по воле случая подарил такую возможность коллеге по цеху(
Почему все собеседования однотипные и далеки от жизни: реши алго задачку(причем пиши код в каком-то текстовом редакторе) расскажи теорию по языку. Практически никто не спрашивает про CI/CD, Docker, Kubernetes(хотя бы поверхностно) какие есть проблемы у данных технологии/почему их стоит использовать и тд и тп. На одном языке практически ничего невозможно сделать…
Я бы отсортировал по длине фамилии и удалил фио которое стоит в середине
Ооо, древнее зло пробудилось и начало видосики заливать! :D
P.S. Харош болеть уже.
50:23 надо минимальную разницу от среднего значения брать. Выяснить индекс минимального значения и удалить из списка ФИО по индексу. А так, я бы через словари реализовал. Но я бы также переволновался и тупил😅 Мишутка, 2й месяц изучения пайтона с нуля ;)
Как попасть к вам на собеседование?
Спасибо за видео. Но я не понял. Это реальное интервью? Я так понимаю, что этих знаний не достаточно, для получение работы. В тестовых заданиях ведь не только python, но и Django , docker и прочее.
@@meyo399 mock интервью, не настоящее
ну за час физически невозможно выяснить что знает джун из всего, что он должен знать, но представление об уровне знаний можно получить
@@MrBeltalowda я это понимаю. Я по другое. Почекай вакансии там нигде не написано, что знание питона. Везде связка с Django и подобными библиотеками. Это ещё нужно выучить Джанго, HTML, CSS, базы данных и прочее.
Django , docker и прочее это инструменты , сегодня Django завтра что то другое , а пайтон это база , без него ты этими инструментами пользоваться не сможешь
@@gucci1260 народ не выкупает, что тот же джанго, это по сути кастомый набор классов наспанных на питоне
А собесы проходят только для тех кто из яндекса?
yep, плебсы только наблюдают
Сам подход неправильный. Надо отсортировать список по длине фамилий и убрать средний элемент списка.
Бинго!
На сколько я понял, что речь про количество букв в фамилии, а если будет, например, в отсортированном списке [5, 5, 6, 7, 8, 11](речь про количество букв в фамилии), то средний элемент по количеству букв это 8, а в середине списка 6 или 7, то ответ будет не правильным или нет?
Как я понимаю, задача на то как человек будет подходить к задаче и как он думает какие уточняющие вопросы задает и т.д.
а если 2 или больше с одинаковрй длийнной? или четное колличество записей? У вас получается медианное значение, а у участника среднее арифметическое.
@@Dim78888 Так медианное важнее. А если будет одна фамилия их двух букв(Ли) и 20 фамилий из 10 букв?
@@Vjqifg 🙂 они для разного существуют и оба важны. В условии задания среднее значение, а не медианное.
Подопытный Иван всё-таки решил эту задачу таким образом:
from typing import List
fio = """Иванов И. И.
Смирнович П. П.
Ким Ю. Л."""
fio_list = [fio for fio in sorted(fio.split('
')) if fio]
def remove_avg_surname(fio_lst: List[str]) -> List[str]:
"""Удаление ФИО из списка, длина фамилии которого близка к
среднему значению длин фамилий остальных ФИО.
"""
if not fio_lst or type(fio_lst) is not list:
return []
# Считаем длину каждой фамилии в списке ФИО
surnames_len = [(len(fio.split()[0]), fio) for fio in fio_lst]
# Находим среднюю длину фамилий
avg_len = sum(map(lambda x: x[0], surnames_len)) // len(surnames_len)
# Находим отклонение длины каждой фамилии от средней длины
deltas = [(abs(avg_len - surn[0]), surn[1]) for surn in surnames_len]
# Получаем самую первую фамилию с минимальным отклонением
avg_surname = sorted(deltas, key=lambda x: x[0])[0][1]
# Удаляем ФИО из исходного списка
fio_lst.remove(avg_surname)
return fio_lst
И тесты для проверки:
assert remove_avg_surname([]) == []
assert remove_avg_surname('не список') == []
assert remove_avg_surname(['Чапаев В. И.']) == []
assert remove_avg_surname(
['Ивановов И. И.', 'Смирнович П. П.', 'Ким Ю. Л.']
) == ['Смирнович П. П.', 'Ким Ю. Л.']
assert remove_avg_surname(
['Смирнович П. П.', 'Ким Ю. Л.', 'Велес И. И.']
) == ['Смирнович П. П.', 'Ким Ю. Л.']
assert remove_avg_surname(
['Смирнович П. П.', 'Кимченко Ю. Л.', 'Велес И. И.']
) == ['Смирнович П. П.', 'Велес И. И.']
assert remove_avg_surname(
['Кимченко Ю. Л.', 'Велес И. И.']
) == ['Кимченко Ю. Л.']
assert remove_avg_surname(
['Биба Ю. Л.', 'Боба И. И.']
) == ['Боба И. И.']
assert remove_avg_surname(
['Боба И. И.', 'Биба Ю. Л.']
) == ['Биба Ю. Л.']
assert remove_avg_surname(
['Боба Я. И.', 'Боба Ю. Л.']
) == ['Боба Ю. Л.']
assert remove_avg_surname(
['Шу И. И.', 'Шуб Ю. Л.', 'Шуба Ю. Л.', 'Шубад Ю. Л.', 'Шубадубадубаев Ю. Л.']
) == ['Шу И. И.', 'Шуб Ю. Л.', 'Шуба Ю. Л.', 'Шубадубадубаев Ю. Л.']
assert remove_avg_surname(
['Шу И. И.', 'Шубадубадубаев Ю. Л.']
) == ['Шубадубадубаев Ю. Л.']
Добрый день. Какую фамилию нужно удалить из этого перечня?
fio = """Шу И. И.
Шубад Ю. Л.
Шубаду Ю. Л.
Шуб Ю. Л.
Шуба Ю. Л.
Шубадубадубаев Ю. Л."""
По этим расчетам (2 + 3 + 4 + 5 + 6 + 14) / 6 = 5.67 нужно удалить фамилию с шестью буквами. Ваш код так работает?
Если что, не пытаюсь уличить вас в ошибке. Мой код работает иначе, и хочется понять, как правильно)
@@dmitrikolesnikov9762 Привет!
В основном так, но у меня идёт целочисленное деление. Поэтому вместо 5.67 (что логично округлить до 6) у меня бы средняя длина фамилии в этом примере была равна 5.
Поэтому, по моему коду должна удалиться фамилия - Шубад.
Ну а вообще ты хороший пример привёл, который показывает, что с математической точки зрения было бы правильнее округлять до 6 и удалить фамилию - Шубаду.
Поэтому в этой задаче всё зависит от способа округления.
Самое прикольное в том, что не надо было так заморачиваться и Андрей вообще ожидал от меня решение типа "в отсортированном списке удалить средний по индексу или ближайший к нему элемент", что делается в две строчки кода, но меня куда-то не в ту степь понесло.
Решение с фамилией, длина которой ближе к середине. Ближе это не значит +- в обе стороны, это значит максимально близко.
Решение,, список отсортирован уже по длине фамилий:
new_surname = sorted(list(map(lambda x: x.split(), arra)), key=lambda x:len(x[0]))
while len(new_surname) > 1:
new_surname.pop(new_surname.index(max(new_surname, key=lambda x:len(x[0]))))
new_surname.pop(new_surname.index(min(new_surname, key=lambda x:len(x[0]))))
print(f' result {new_surname}')
def delete_one_avg_len_fio(list_fio: list) -> list:
''' Удалить из списка фио наиболее близкое к середине (только одну, по длине символов) '''
list_count_words = list(map(lambda x: len(x.split()[0]), list_fio))
sr_count = (max(list_count_words) + min(list_count_words)) / 2
key_word = 0
find_word = max(list_count_words)
for key, value in enumerate(list_count_words):
if value == sr_count:
key_word = key
break
if max(list_count_words) > value > min(list_count_words) and abs(value - sr_count) < find_word:
find_word = abs(value - sr_count)
key_word = key
list_fio.pop(key_word)
return list_fio
Не ругайтесь сильно!
text = '''Бабинець Ринат Германович
Жебраков Иван Максимович
Муханкин Виталий Вадимович
Перфирьев Руслан Константинович
Табачник Ян Ефимович
Тинаев Виталий Викторович
Цизин Ринат Валентинович
Черемисинов Михаил Денисович'''
def func(txt):
txt = txt.split('
')
txt = sorted(txt, key=lambda x: len(x.split()[0]))
return [x for x in txt if txt.index(x) != len(txt)//2]
вроде работает
p.s Курсы не проходил , учусь из интернета пару месяцев.
Не судите строго
а ну если тоже Бибенца удалять то вот так
if txt.index(x) != len(txt) // 4
Это не нужно: [x for x in txt if txt.index(x) != len(txt)//2]
Проще исключить по индексу через pop(len(txt)//2)
Решение не является правильным. Ниже объясняю пример.
print(func('Шу И. И.
Шуб Ю. Л.
Шуба Ю. Л.
Шубад Ю. Л.
Шубадубадубаев Ю. Л.'))
Здесь у нас пять фамилий. Средняя длина этих пяти фамилий равна 5, т.к. ((2+3+4+5+14) // 5) == 5
Следовательно, мы должны удалить фамилию "Шубад", которая ближе всего к среднему значению длин всех фамилий.
Но по логике твоего алгоритма, мы удалим человека с фамилией "Шуба"
@@ivanhom94
def func(txt):
txt = txt.split('
')
txt = sorted(txt, key=lambda x: len(x.split()[0]))
average = sum([len(x) for x in txt]) // len(txt)
return [x for x in txt if len(x) != average]
получается что так?
C проверкой
def func(txt):
if not txt:
return []
txt = txt.split('
')
average = sum(len(x) for x in txt) // len(txt)
return [x for x in sorted(txt, key=lambda x: len(x.split()[0])) if len(x) != average]
'''
Надо убрать переносы строк в списке полных имён,
отсортировать список полных имён по алфавиту и написать функцию,
которая должна удалять из изначального массива отсортированных полных имён то полное имя,
длина фамилии которого равна или близка к значению средней длины всех фамилий в ней.
'''
fullname_list = '''Бабинець Ринат Германович
Жебраков Иван Максимович
Муханкин Виталий Вадимович
Перфирьев Руслан Константинович
Табачник Ян Ефимович
Тинаев Виталий Викторович
Цизин Ринат Валентинович
Черемисинов Михаил Денисович'''
sorted_fullname_list = sorted(fullname_list.split('
'))
def process_sorted_fullname_list(sorted_fullname_list: list[str]) -> list[str]:
surnames = [sorted_fullname.split()[0] for sorted_fullname in sorted_fullname_list]
surnames_lengths = [len(surname) for surname in surnames]
average_surnames_lengths = round(sum(surnames_lengths) / len(surnames_lengths))
differences = [abs(len(surname) - average_surnames_lengths) for surname in surnames]
min_difference = min(differences)
return [fullname for fullname, difference in zip(sorted_fullname_list, differences) if difference != min_difference]
def process_sorted_fullname_list_2(sorted_fullname_list: list[str]) -> list[str]:
surnames_lengths = []
differences = []
for sorted_fullname in sorted_fullname_list:
surnames_lengths.append(len(sorted_fullname.split()[0]))
average_surnames_lengths = round(sum(surnames_lengths) / len(surnames_lengths))
differences.append(abs(len(sorted_fullname.split()[0]) - average_surnames_lengths))
return [fullname for fullname, difference in zip(sorted_fullname_list, differences) if difference != min(differences)]
print(process_sorted_fullname_list(sorted_fullname_list))
print(process_sorted_fullname_list_2(sorted_fullname_list))
У меня возникла дилемма:
Первая функция проигрывает по памяти, но выигрывает по скорости.
Вторая функция проигрывает по скорости, но выигрывает по памяти.
Какая функция более эффективная и почему? Сам склоняюсь к первой.
Классное решение! 2 ое не разглядывал, но 1ая функция у вас удалит сразу двоих. Как я понял из дачи, нужно кого-то одного.
def filter_out_average_length_names(text: str) -> List[str]:
full_names = text.split("
")
last_names = [name.split()[0] for name in full_names]
average_length = sum([len(last_name) for last_name in last_names]) / len(last_names)
min_diff = min([abs(len(last_name) - average_length) for last_name in last_names])
last_names = [last_name for last_name in last_names if abs(len(last_name) - average_length) > min_diff]
return [name for name in full_names if name.split()[0] in last_names]
Почти правильно.
Проверь теперь что выведет:
print(filter_out_average_length_names('Боба И. И.
Биба Ю. Л.'))
print(filter_out_average_length_names(''))
Решение задачи с именами в одну строку:
def func():
return sorted([' '.join(names.split()[i - 3:i]) for i in range(3, len(names.split()), 3)], key=lambda x: x[0])