Напишите функцию `flatten(nested)`, которая принимает список списков и возвращает плоский список с помощью `itertools.chain.from_iterable`. Пример: `flatten([[1, 2], [3], [4, 5, 6]])` → `[1, 2, 3, 4, 5, 6]`.
Напишите функцию `first_n(gen, n)`, которая возвращает первые `n` элементов из любого генератора или итератора в виде списка, используя `itertools.islice`. Пример: `first_n((x**2 for x in range(100)), 5)` → `[0, 1, 4, 9, 16]`.
from itertools import islice
def first_n(gen, n):
pass
print(first_n((x**2 for x in range(100)), 5))
# [0, 1, 4, 9, 16]
Решение
from itertools import islice
def first_n(gen, n):
return list(islice(gen, n))
print(first_n((x**2 for x in range(100)), 5))
# [0, 1, 4, 9, 16]
Напишите функцию `round_robin(tasks)`, которая принимает список имён задач и возвращает бесконечный цикличный итератор с помощью `itertools.cycle`. Затем используйте `itertools.islice` для получения первых 8 назначений. Пример: `list(islice(round_robin(["A", "B", "C"]), 8))` → `["A", "B", "C", "A", "B", "C", "A", "B"]`.
Напишите функцию `merge_sequences(seq1, seq2, seq3, fill=None)`, которая объединяет три последовательности поэлементно с помощью `itertools.zip_longest`, используя `fill` как недостающее значение. Возвращает результат как список кортежей. Пример: `merge_sequences([1,2,3], ["a","b"], [True], fill=0)` → `[(1,"a",True), (2,"b",0), (3,0,0)]`.
Напишите функцию `running_max(numbers)`, которая возвращает список, где каждый элемент является максимальным значением, встреченным к текущему моменту в `numbers`. Используйте `itertools.accumulate`. Пример: `running_max([3, 1, 4, 1, 5, 9, 2, 6])` → `[3, 3, 4, 4, 5, 9, 9, 9]`.
Напишите функцию `all_pairs(items)`, которая возвращает все уникальные неупорядоченные пары элементов (элемент не сочетается с собой). Используйте `itertools.combinations`. Пример: `all_pairs(["A", "B", "C", "D"])` → `[("A","B"), ("A","C"), ("A","D"), ("B","C"), ("B","D"), ("C","D")]`.
Напишите функцию `group_by(items, key_func)`, которая группирует список элементов по функции ключа и возвращает словарь, отображающий каждый ключ на список элементов. Используйте `itertools.groupby` (не забудьте сначала отсортировать). Пример: с `items = ["apple", "ant", "banana", "bear", "cherry"]` и `key_func = lambda w: w[0]`, результат: `{"a": ["ant", "apple"], "b": ["banana", "bear"], "c": ["cherry"]}`.
Напишите функцию `read_until_empty(lines)`, которая принимает список строк и возвращает только строки до первой пустой строки (или строки содержащей только пробелы), используя `itertools.takewhile`. Пример: `read_until_empty(["hello", "world", "", "more", "text"])` → `["hello", "world"]`.
Напишите функцию `generate_passwords(chars, length, count)`, которая генерирует `count` уникальных паролей длиной `length` символов, где каждый пароль строится из `itertools.product(chars, repeat=length)`. Возвращает первые `count` произведений как объединённые строки. Пример: `generate_passwords("ab", 2, 4)` → `["aa", "ab", "ba", "bb"]` (используйте product по порядку, без случайности).
from itertools import product, islice
def generate_passwords(chars, length, count):
return ["".join(p) for p in islice(product(chars, repeat=length), count)]
print(generate_passwords("ab", 2, 4))
# ["aa", "ab", "ba", "bb"]
No split tab
Настройки cookies
Мы используем необходимые cookies для работы сайта. С вашего разрешения мы также можем сохранять настройки сайта и использовать аналитические и рекламные cookies, чтобы понимать использование сайта и поддерживать развитие проекта.
* Вы всегда можете изменить свой выбор в настройках сайта.
Выберите категории cookies
Настройки аналитики
Можно отключить аналитику использования платформы. Также можно отправить в Google Analytics запрос на удаление данных об использовании этого сайта, связанных с этим браузером.
Учебный workspace
Учитесь, читая, запуская код и решая задачи.
Практикуйте программирование с пояснениями тем, упражнениями, инструментами browser IDE, проверкой regex и тренировкой печати кода в одном workspace.
Открывайте инструменты во вкладках.Упражнения, IDE-инструменты и тренажеры остаются доступными как вкладки сайта.
Переключайтесь без потери контекста.Переходите между пояснениями, кодом и утилитами, сохраняя свое место.
Используйте sidebar как карту.Левые панели содержат навигацию, настройки, файлы, libraries и управление инструментами.
PythonJavaScriptSQLite
Одна IDE, три практичных режима
Python в браузере.Запускайте небольшие скрипты, пробуйте библиотеки и тренируйте API-запросы без установки.
JavaScript для быстрых экспериментов.Проверяйте код для браузера и сравнивайте идеи рядом с учебными материалами.
SQLite для практики с данными.Открывайте обозреватель базы данных, изучайте таблицы, пишите запросы и учитесь SQL локально.
ТемаIDE
Работайте рядом в split tabs
Держите инструкции перед глазами.Откройте упражнение или справочную страницу рядом с IDE, вместо постоянных переключений.
Сравнивайте инструменты во время обучения.Размещайте проверки regex, пояснения и эксперименты с кодом рядом, когда это нужно для задачи.
Закройте split, когда закончите.Workspace вернётся к одной сфокусированной вкладке, а открытые вкладки сайта останутся доступны.
Тренажер слепой печати кода
Или просто текста
Тренажер рассчитан на физическую клавиатуру.Откройте этот раздел на ноутбуке или компьютере с широким экраном. На телефоне тренировка слепой печати не будет корректной.
Скорость: 0 зн/мин
0 слов/мин
Лучшая скорость (60с): 0 зн/мин
0 слов/мин
Ошибки: 0
Общее время: 0.0 с
Для активации режима слепого набора не подсматривайте на физическую клавиатуру.