Python: задачки и вопросы
7.78K subscribers
1.18K photos
1 video
1 file
86 links
Вопросы и задачки для подготовки к собеседованиям и прокачки навыков

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels

Другие наши проекты: https://tprg.ru/media
加入频道
Какая строка на картинке является генераторным выражением?
Anonymous Quiz
12%
1
46%
2
3%
3
13%
4
25%
Все
Проще запомнить, кто есть кто, если обратить внимание на тип возвращаемого объекта:


[х * х for х in range (10)] # Списковое включение: строит список
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81] # Подобно list(генераторное выражение)

(х * х for х in range (10)) # Генератор: Генераторное выражение
<generator object <genexpr> at 0x10451eb50> # Круглые скобки часто необязательны

{x * x for x in range (10)} # Включение множества
{0, 1, 64, 4, 36, 9, 16, 49, 81, 25}

{x: x * x for x in range(10)} # Включение словаря
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
Функция pd.set_option() в библиотеке Pandas позволяет настраивать различные параметры отображения и поведения датафрейма, улучшая пользовательский опыт. Она позволяет изменять такие настройки, как максимальное количество отображаемых строк и столбцов, точность представления чисел, форматирование дат и времени, а также задавать бэкенд-движки при чтении файлов Excel, баз SQL и проч. Пользователи могут установить параметры как глобально, так и для конкретных сессий, что позволяет тонко настраивать визуализацию данных под свои нужды. Доступные параметры можно просмотреть с помощью pd.get_option() и pd.describe_option(), что упрощает управление настройками.

Документация
Что выведет код?
Anonymous Quiz
54%
99
28%
4
8%
5
10%
Error
for Y in range(5): pass # Операторы циклов имена не локализуют
Генератор выражений: x * x for x in range(10) вычисляет квадрат числа x для каждого числа x в диапазоне от 0 до 9 (то есть от 0 до 9 включительно).

2. set: Функция set() берет все значения, производимые генератором, и добавляет их в множество. Итак, в результате формируется множество, содержащее значения: {0, 1, 4, 9, 16, 25, 36, 49, 64, 81}

В Python множество (set) не гарантирует порядок элементов, и при каждом запуске программы в разных версиях языка он будет отличаться.
x * x for x in range(10) вычисляет квадрат числа x для каждого четного числа x в диапазоне от 0 до 9 (то есть 0, 2, 4, 6, 8).

Фигурные скобки и x: обозначают генерацию словаря, где в качестве ключа будет выступать исходный четный x (то есть числа 0, 2, 4, 6, 8).

Ключи словаря тоже не упорядочиваются, потому в разных версиях интерпретаторов мы будем получать разный порядок ключей.
На каждой итерации внутреннего цикла вам доступен элемент x из первого списка и элемент y из второго списка, и вы выполняете сложение этих двух значений: x + y.

Результат каждого сложения добавляется в множество a. Множество автоматически удаляет дубликаты.
Какой встроенный модуль позволяет замерить время исполнения кода?
Anonymous Quiz
9%
statistics
23%
datetime
59%
time
9%
Никакой из вышеперечисленных
Модуль time позволяет замерить время исполнения кода. Вот пример функции с ее использованием:

import time

def timer(func, *args): # Упрощенная функция измерения времени
start = time.clock()
for i in range(1000):
func(*args)
return time.clock() - start # Суммарное истекшее время в секундах


Что делают остальные модули, можно посмотреть в полном списке в документации Python.
Какой из способов создания списка самый быстрый?
Anonymous Quiz
6%
1
35%
2
34%
3
12%
4
13%
5
map() — самый быстрый вариант, поскольку функция фактически работает на C. И это превышает скорости конкурентов. А кто в рейтинге взял серебро и бронзу?

Как видно, в каждой функции по 10 миллионов шагов функций — каждая строит список из 10 000 элементов 1000 раз.

Запустив сценарий в Python 3.7, мы получаем следующие результаты — map() быстрее списковых включений, они оба быстрее циклов for, а генераторные выражения и функции находятся посередине (время в секундах):


forLoop :: 2.34160
listComp : 1.31783
mapCall :: 0.41968
genExpr :: 1.92063
genFunc :: 1.93672


Генераторное выражение должно делать дополнительную работу по сохранению и
восстановлению своего состояния во время выпуска значений.