Генератор и списки. Выход за длину листа. Python
Такое задание:
- Есть два списка: tutors = [ 'Иван', 'Анастасия', 'Петр', 'Сергей', 'Дмитрий', 'Борис', 'Елена' ] klasses = [ '9А', '7В', '9Б', '9В', '8Б', '10А', '10Б', '9А' ] Необходимо реализовать генератор, возвращающий кортежи вида (, ), например: ('Иван', '9А') ('Анастасия', '7В') ... Количество генерируемых кортежей не должно быть больше длины списка tutors. Если в списке klasses меньше элементов, чем в списке tutors, необходимо вывести последние кортежи в виде: (, None), например: ('Станислав', None)
Дело в том, что я выхожу за длину и я вроде даже написал, что вот, на последний индекс класса нужно чтобы выводило (None, класс), но все равно ошибка. Мне предложили решить zip_longest(), но я либо чего-то не понял, либо не понял человек с которым мы это обсуждали, но мне нужен именно генератор!!! Поэтому я не очень понимаю как решить правильно, помогите пожалуйста. Код без зипа:
tutors = [
'Иван', 'Анастасия', 'Петр', 'Сергей',
'Дмитрий', 'Борис', 'Елена'
]
klasses = [
'9А', '7В', '9Б', '9В', '8Б', '10А', '10Б', '9А'
]
def gen_of_people():
i = 0
j = 0
while i != len(klasses):
if i == klasses[-1]:
yield (None, klasses[i])
i += 1
j += 1
break
else:
yield (tutors[j], klasses[i])
i += 1
j += 1
for gen in gen_of_people():
print(gen)
Ответы (1 шт):
Автор решения: rossinante_destiny67
→ Ссылка
from itertools import zip_longest
tutors = [ 'Иван', 'Анастасия', 'Петр', 'Сергей', 'Дмитрий', 'Борис', 'Елена' ]
klasses = [ '9А', '7В', '9Б', '9В', '8Б', '10А', '10Б', '9А' ]
iterator = zip_longest(tutors, klasses[:len(tutors)])
print(list(iterator))
_____________________________
[('Иван', '9А'), ('Анастасия', '7В'), ('Петр', '9Б'), ('Сергей', '9В'), ('Дмитрий', '8Б'), ('Борис', '10А'), ('Елена', '10Б')]
