Вопросы по теме «Коллекции и структуры данных»

Списки, словари, множества, кортежи — базовые структуры данных Python, без которых не обойтись ни в анализе, ни на собеседовании. Спрашивают про сложность операций, разницу между list и tuple, когда использовать set вместо list. Понимание коллекций показывает, что кандидат пишет эффективный код, а не просто «работающий».

Всего в этом разделе 40 вопросов. Каждый — с правильным ответом и кратким разбором теории. Разбито на 8 частей по 5 вопросов.

Генераторы списков и встроенные функцииЦиклы и условияИсключения и отладкаРабота с файлами: JSON и CSVФункции и аргументыИтераторы и генераторыNumPy: основыPandas и DataFrameСинтаксис и типы данных

Вопросы 15 из 40

1Дан список `nums = [10, 20, 30, 40]`. Чему равен результат выражения `nums[1:3]`?
A`[20, 30]`
B`[10, 20, 30]`
C`[30, 40]`
D`[20, 30, 40]`
Ответ: Срез `a[i:j]` берёт элементы с индексами от `i` включительно до `j` не включительно.

В срезах `list` начало включается, конец — нет. Поэтому `nums[1:3]` включает элементы с индексами 1 и 2, то есть 20 и 30. Это правило удобно для работы с окнами и батчами данных.

2Дан список пар `pairs = [('views', 5), ('clicks', 6), ('purchases', 9)]`. Что вернёт выражение `{k: v for k, v in pairs}`?
AСловарь `{'views': 5, 'clicks': 6, 'purchases': 9}` с тремя ключами
BСписок кортежей `[('views', 5), ('clicks', 6), ('purchases', 9)]`
CМножество пар `{('views', 5), ('clicks', 6), ('purchases', 9)}`
DИсключение `SyntaxError`, потому что `dict` не поддерживает генераторы
Ответ: Dict comprehension `{k: v for ...}` создаёт словарь из пар ключ-значение.

Выражение `{k: v for k, v in pairs}` — это генератор словаря. Он перебирает пары и строит `dict` с ключами и значениями. Похожий синтаксис `{x for x in lst}` без двоеточия создаёт множество, а `[x for x in lst]` — список. Наличие двоеточия `:` между ключом и значением отличает dict comprehension от set comprehension.

3Есть словарь `d = {"country": "RU"}`. Нужно получить значение по ключу `"city"`, но если ключа нет — вернуть строку `"unknown"` без исключения. Что правильно?
A`d["city"]`
B`d.get("city", "unknown")`
C`d.items("city", "unknown")`
D`d.get("unknown", "city")`
Ответ: `.get()` возвращает значение по ключу или значение по умолчанию и не выбрасывает `KeyError`.

Обращение `d["city"]` выбросит `KeyError`, если ключа нет. Метод `.get("city", "unknown")` безопасно вернёт значение по ключу, а при отсутствии — строку по умолчанию. Если не передавать второй аргумент, `.get("city")` вернёт `None`.

4Есть список приоритетов `tasks = ['low', 'medium']`. Что произойдёт после вызова `tasks.insert(0, 'urgent')`?
AВставит `'urgent'` в конец: `['low', 'medium', 'urgent']`, индекс `0` игнорируется
BЗаменит первый элемент: `['urgent', 'medium']`, старое значение `'low'` удалится
CВставит `'urgent'` перед первым элементом: `['urgent', 'low', 'medium']`
DВыбросит `IndexError`, потому что позиция `0` в списке уже занята элементом
Ответ: Метод `.insert(i, x)` вставляет элемент `x` перед позицией `i`, сдвигая остальные элементы.

Вызов `tasks.insert(0, 'urgent')` поместит строку `'urgent'` в начало списка, сдвигая все существующие элементы на одну позицию вправо. В отличие от `.append()`, который добавляет только в конец, `.insert()` позволяет вставить элемент в любую позицию. Метод изменяет список на месте и возвращает `None`.

5Есть словарь `config = {'timeout': 10, 'retries': 3}`. Что произойдёт при вызове `config.pop('timeout', None)`?
AВернёт `None` и не удалит ключ, потому что задан аргумент по умолчанию
BВернёт `10` и удалит ключ `'timeout'` из словаря
CВернёт весь словарь без ключа `'timeout'` как новый объект `dict`
DВыбросит `KeyError`, потому что `pop()` не принимает значение по умолчанию
Ответ: Метод `.pop(key, default)` возвращает значение по ключу, удаляет его из словаря и не вызывает ошибку, если задан `default`.

Вызов `config.pop('timeout', None)` найдёт ключ `'timeout'`, вернёт его значение `10` и удалит пару из словаря. Если бы ключа не было, метод вернул бы `None` (значение по умолчанию) без ошибки. Без второго аргумента `.pop()` выбросит `KeyError` при отсутствии ключа — как и обращение по `d[key]`.

12345678

Хотите тренировать интерактивно?

В приложении — таймер, прогресс, стрики и 1700+ вопросов по всем темам.

Тренировать в Telegram

Другие темы: Python

Генераторы списков и встроенные функцииЦиклы и условияИсключения и отладкаРабота с файлами: JSON и CSVФункции и аргументыИтераторы и генераторыNumPy: основыPandas и DataFrameСинтаксис и типы данных