Я бы переписал вариант от
aRegius для данного случая так:
def flatten(sequence):
for item in sequence:
try:
yield from item # Или yield from flatten(item) для более общего случая
except TypeError:
yield item
Первый подход предпочтителен, но можно ещё и так (код хуже читается):
from itertools import chain
def flatten(sequence):
list_of_lists = ([item] if type(item) is int else item for item in sequence)
return list(chain.from_iterable(list_of_lists))
flatten([1, 2, 3, [4, 5, 6], 7, 8])
И ещё вариант, ради фана:
[int(e) for e in re.findall('\d+', str(a))]