Напишіть функцію `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]`.
Напишіть функцію `grid(rows, cols)`, яка повертає всі пари координат (row, col) для сітки заданих розмірів, використовуючи `itertools.product`. Приклад: `grid(2, 3)` → `[(0,0), (0,1), (0,2), (1,0), (1,1), (1,2)]`.
Напишіть функцію `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 с
Щоб тренувати сліпий друк, не підглядайте на фізичну клавіатуру.