Почему не работает генератор в Python
Подскажите почему не работает генератор? Смысл в том что нужно найти числа содержащие цифру 9. Выдает все что не попадя. При этом собираю через вложенные циклы, все работает. Ткните носом пожалуйста.
res = []
for i in big_list:
for j in i:
if '9' in str(j):
res.append(j)
from pprint import pprint
lst_1 = [i ** 2 for i in range(10) if i % 2]
lst_2 = [i ** 3 for i in range(17) if not i % 2]
lst_3 = [i ** 3 for i in range(10, 15) if i % 2]
lst_4 = [i ** 2 for i in range(10, 18) if not i % 2]
big_list = [lst_1, lst_2, lst_3, lst_4]
pprint(big_list)
res = [num for i in big_list
for num in i if '9' in str(i)]
print(res)
Ответы (1 шт):
Автор решения: MarianD
→ Ссылка
Здесь ошибка:
res = [num for i in big_list
for num in i if '9' in str(i)]
^
Должно быть
res = [num for i in big_list
for num in i if '9' in str(num)]
Результат:
>>> res [9, 49, 4096, 2197, 196]
Объяснение:
Во вложенном цикле вы правильно применили
if '9' in str(j):
но в генераторе, где вы вместо j использовали num, вы уже не подставили вместо j num:
..... if '9' in str(num)] # правильно
а i (неправильно, т.к. i - список (в списке big_list)).