Python: задачки и вопросы
Открыть в Telegram
Вопросы и задачки для подготовки к собеседованиям и прокачки навыков Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Другие наши проекты: https://tprg.ru/media
Больше6 864
Подписчики
-224 часа
-137 дней
-4730 дней
Архив постов
В данном случае однократное списковое включение «сплющивает» матрицу до вектора, т.е. списка чисел. Чтобы понять такой код, его можно преобразовать к виду простых операторов:
res = []
for row in М: # Эквиваленты в виде операторов
for col in row: # Отступ для частей, находящихся дальше справа
res.append(col + 10)
Чтобы сохранить матрицу, достаточно использовать двойное списковое включение:
[[col + 10 for col in row] for row in M]
С применением функции
range() генерируется список смещений и производится индексация с одинаковыми номерами строк и столбцов, выбирающая М[0][0], затем М[1][1] и т.д. Во второй строке индекс столбца уравновешивается для извлечения М[0][2], М[1][1] и т.д. (мы предполагаем, что матрица имеет равное количество строк и столбцов):
M = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
# Диагональ
[M[i][i] for i in range(len(M))] # [1, 5, 9]
# Обратная диагональ
[M[i][len(M)-1-i] for i in range(len(M))] # [3, 5, 7]Узнай грейд и рыночную зарплату + получи план развития бесплатно
На связи ШОРТКАТ. Мы провели 300+ собеседований с менторами из бигтеха, собрали ключевые вопросы с собесов и сделали тест, который поможет оценить навыки.
Вот как это работает:
1. Ты проходишь экспресс-тест за 20 минут или его расширенную версию
2. Бронируешь звонок для презентации обратной связи по ответам — можем встретиться уже на следующий день!
3. К созвону проверим ответы, чекнем СV и на основе этого оценим твой грейд.
Ещё подскажем зарплату в рынке, построим план развития до следующего уровня и расскажем про наш новый продукт, который поможет получить выгодный оффер в 2025 году.
Переходи в бота и проходи тест бесплатно, а дальше расскажем, что и как: @shortcut_python_bot
Реклама. ООО «Шорткат» ИНН 9731139396, erid: 2W5zFHw2ti4
Мы всегда можем индексировать по строкам и столбцам внутри строк с использованием нормальных операций индексации:
M = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
М[1] # [4, 5, 6]
М[1][2] # 6 (Строка 2, элемент 3)
Cписковые включения являются мощным инструментом для обработки таких структур, потому что они автоматически просматривают строки и столбцы. Скажем, хотя такая структура хранит матрицы по строкам, для сбора значений второго столбца мы можем просто проходить по строкам и извлекать желаемый столбец или проходить по позициям в строках с индексаций в ходе дела:
[row[1] for row in M] # [2, 5, 8]
Это списковое включение комбинирует четные числа от 0 до 4 с нечетными числами от 0 до 4, поскольку
range() генерирует ряд чисел, НЕ ВКЛЮЧАЯ 5. Конструкции if отфильтровывают элементы на каждой итерации. Вот эквивалентный код на основе операторов:
res == []
for х in range(5) :
if x % 2 == 0:
for у in range(5) :
if у % 2 == 1:
res.append(x, y)
res # [(0, 1), (0, 3), (2, 1), (2, 3), (4, 1), (4, 3)]Списковые включения
Их простейшая форма предусматривает указание накапливающего выражения и одиночной конструкции for:
[ выражение for цель in итерируемый_объект ]Несмотря на необязательность всех остальных частей, они позволяют выражать более развитые итерации — в списковом включении допускается записывать любое количество вложенных циклов
for, каждое из которых может иметь необязательную ассоциированную проверку if, действующую в качестве фильтра. Общая структура списковых включений выглядит следующим образом:
[ выражение for цель1 in итерируемый_объект1 if условие1 for цель2 in итерируемый_объект2 if условие2 . . . for цельN in итерируемый_объектN if условиеN ]Когда конструкции
for вкладываются внутри спискового включения, они работают подобно эквивалентным вложенным операторам цикла for:
res = [х + у for х in [0, 1, 2] for у in [100, 200, 300]]
res # [100, 200, 300, 101, 201, 301, 102, 202, 302]
Эффект будет таким же, как у показанного ниже существенно более многословного
эквивалента:
res = []
for x in [0, 1, 2]:
for у in [100, 200, 300]:
res.append(x + y)
print(res) # [100, 200, 300, 101, 201, 301, 102, 202, 302]Встроенная функция
ord() в Python возвращает целочисленную кодовую точку
одиночного символа:
ord('s') # 115
mар() передает каждый элемент итерируемого объекта некой функции и собирает все результаты. Однако при передаче функции в качестве аргумента map() скобки опускаются, потому код выше вызовет ошибку:
Ниже приведен пример верного синтаксиса:
counters = [1, 2, 3, 4]
def inc(x): return х + 10 # Прибавим каждому элементу 10
list(map(inc, counters)) # [11, 12, 13, 14]Какой из методов pandas удалит записи с пропусками? #размяться
