TGViewer
Channel Public Channel
Python: задачки и вопросы

Python: задачки и вопросы

@quiz_python

Вопросы и задачки для подготовки к собеседованиям и прокачки навыков

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

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

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

Другие наши проекты: https://tprg.ru/media
Subscribers
6.92K
Photos
1.4K
Videos
1
Links
126

Showing posts older than #3685 · Back to latest

Older Posts 20 shown
Post #3684 1.21K
Функция zip() принимает два или более итерируемых объекта (в данном случае, строки) и создает итератор, который генерирует кортежи, содержащие элементы, исходящие от каждого из итерируемых объектов на соответствующих позициях. Это значит, что zip будет объединять первый элемент S1 с первым элементом S2, второй элемент S1 со вторым элементом S2 и так далее.

Поскольку S1 содержит 3 элемента, а S2 — 6 элементов, zip() объединит только столько элементов, сколько есть в наименьшем итерируемом объекте, то есть в S1.
Post #3682 1.23K
#размяться
Post #3681 1.23K
L, S = [1, 2, 3], 'spam'

for i in range(len(S)): # Цикл с подсчетом 0.3
S = S[1:] + S[:1] # Перемещение головного элемента в конец
print(S, end=' ')
Post #3679 1.21K
#размяться
Post #3676 1.31K
Код выводит S P A M, а не SPAM, потому что используется оператор распаковки *, который распаковывает элементы генератора и передает их как отдельные аргументы в функцию print().

- Генераторное выражение: (x.upper() for x in 'spam') создает генератор, который преобразует каждую букву строки 'spam' в верхний регистр, выдавая S, P, A, M по одному.

- Оператор * (распаковка) передает все отдельные элементы генератора как отдельные аргументы в функцию print(). Это эквивалентно вызову print('S', 'P', 'A', 'M').

- По умолчанию print() разделяет свои аргументы пробелами при выводе. Поэтому получаем итоговый результат: S P A M.
Post #3674 1.24K
#ловушка
Post #3673 1.31K
Аргументы со звездочкой способны распаковывать итерируемый объект в индивидуальные аргументы. Однако в нашем примере также присутствует генератор.


def f(a, b, c):
print('%s, %s и %s' % (a, b, c))

# Распаковка значений генераторного выражения
f(*(i for i in range(3)))


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


D = dict(а='Bob', b='dev', с=40.5)

# Нормальные ключевые аргументы
f(a='Bob’, b='dev’, с=40.5) # Bob, dev и 40.5

# Распаковка словаря: ключ=значение
f(**D) # Bob, dev и 40.5

# Распаковка итератора ключей
f(*D) # b, c и a

# Распаковка итератора представления
f(*D.values()) # Bob, dev и 40.5\nNone


None выводится, потому что это означает последний шаг итерирования (StopIteration). Подробнее про это читайте в этом посте.
Telegram Python: задачки и вопросы Объяснение: Первый шаг к пониманию того, что происходит в этом странном коде — это взглянуть на то, что нам говорит PEP 380⁴⁰ об использовании return с yield. Кратко говоря, return expr в генераторе вызывает исключение StopIteration(expr) при выходе из генератора.…
Post #3671 1.22K
#ловушка
Post #3670 1.35K
В версии Python 3.3 и выше есть расширенный синтаксис для оператора yield, который делает возможным делегирование работы подгенератору с помощью конструкции from генератор. В простых ситуациях он эквивалентен выдаче в цикле for — в следующем коде вызов list заставляет генератор выпустить все свои значения, а включение в круглых скобках является генераторным выражением:


def both(N):
for i in range(N): yield i
for i in (x ** 2 for x in range(N)): yield i

print(list(both(5))) # [0, 1, 2, 3, 4, 0, 1, 4, 9, 16]
Post #3668 1.19K
#ловушка
Post #3667 1.26K
Приведенное далее списковое включение производит такой же результат, как показанные после него эквиваленты в форме тар из Python З.Х и генераторов, но создает два физических списка; остальные генерируют только по одному целому числу за раз с помощью вложенных генераторов, а форма генераторного выражения может более четко отражать свое намерение:


[х * 2 for х in [abs(x) for x in (-1, -2, 3, 4)]] # Вложенные включения

list(map(lambda x: x * 2, map(abs, (-1, -2, 3, 4)))) # Вложенные отображения

list(x * 2 for x in (abs(x) for x in (-1, -2, 3, 4))) # Вложенные генераторы


Хотя результатом всех трех форм является объединение операций, генераторы делают это, не создавая множество временных списков.
Post #3665 1.2K
#ловушка
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →