Почему не работает генератор в 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)).

→ Ссылка