chain с combinations и permutations
@python_quizРазберем этот квиз
Коротко: у нас есть цепочка итераторов — сначала все комбинации из четырёх букв по два, затем все перестановки двух букв. Вопрос — какие именно кортежи выведет код.
Условие (код)

Пошаговый разбор
- combinations('ABCD', 2) генерирует все безупороченные комбинации по 2 в лексикографическом порядке:
- ('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'C'), ('B', 'D'), ('C', 'D')
- permutations('XY', 2) даёт все упорядоченные перестановки длины 2:
- ('X', 'Y'), ('Y', 'X')
- chain объединяет эти генераторы последовательно: сначала все комбинации, потом перестановки.
- next(ch) извлекает первый элемент цепочки — это первый элемент первых комбинаций: ('A', 'B').
- list(ch) создаёт список из оставшихся элементов цепочки (все элементы после того, что уже извлечено next). Последний элемент этого списка — последний элемент всей цепочки, то есть последняя перестановка: ('Y', 'X').
Ожидаемый вывод при запуске

Анализ предложенных вариантов
- "('A', 'B') и ('X', 'Y')"
Причина несоответствия: хотя первый элемент совпадает, последний — не ('X', 'Y'), а следующая перестановка ('Y', 'X').
- "('A', 'B') и ('Y', 'X')"
Совпадает с выводом программы: первый элемент — первый результат combinations, последний — последний результат permutations после обхода остатка цепочки.
- "('B', 'C') и ('X', 'Y')"
Первый элемент не совпадает: next возвращает первый элемент комбинаций ('A','B'), а не ('B','C').
- "('B', 'C') и ('Y', 'X')"
Первый элемент снова неверен по той же причине.
Практическая заметка по эффективности
list(ch)[-1] создаёт весь оставшийся список в памяти. Если в реальной задаче последовательность большая и вас интересует только последний элемент, можно экономно пройтись по итератору в одну переменную или использовать deque:
Вариант через простой цикл (память O(1)):

Вариант через deque (удобно и лаконично):

Вывод
Ключевые моменты: chain последовательно соединяет итераторы, next снимает только первый элемент, а list(ch) или проход по ch продолжают с того места, где остановились. В результате первый вывод — первая комбинация ('A', 'B'), а последний — последняя перестановка ('Y', 'X').