Aplanar un iterable de iterables

¿Cómo puedo escribir una function que debería devolver todos los valores nesteds en un iterable?

Aquí hay un ejemplo de lo que estoy tratando de lograr:

 for i in function([1, 2, [3, 4, (5, 6, 7), 8, 9], 10]): print(i, end=' ') 

Rendimiento esperado:

 1 2 3 4 5 6 7 8 9 10 

Los usuarios de Python 2 tienen una función integrada para esta tarea:

 from compiler.ast import flatten 

Desafortunadamente, se ha eliminado en Python 3. Aunque puedes hacer tu propio rollo:

 from collections import Iterable def flatten(collection): for x in collection: if isinstance(x, Iterable) and not isinstance(x, str): yield from flatten(x) else: yield x 

Las preguntas de la tarea con extrañas restricciones requieren respuestas divertidas

 import re def function(L): return re.findall("[a-z0-9]+", repr(L))