¿Cómo imprimir el progreso de una lista de comprensión en python?

En mi método tengo que devolver una lista dentro de una lista. Me gustaría tener una lista de comprensión, debido al rendimiento, ya que la lista tarda unos 5 minutos en crearse.

[[token.text for token in document] for document in doc_collection] 

¿Existe la posibilidad de imprimir el progreso, en qué documento se encuentra actualmente el proceso de creación? Algo como eso:

 [[token.text for token in document] and print(progress) for progress, document in enumerate(doc_collection)] 

¡Gracias por tu ayuda!

Puedes usar una función lateral:

 def report(tok, index): if index % 1000 == 0: print(index) def process(tok, index, report=None): if report: report(tok, index) return tok['text'] l1 = [{'text': k} for k in range(5000)] l2 = [process(tok, index, report) for index, tok in enumerate(l1)] 

huellas dactilares:

 0 1000 2000 3000 4000 
 doc_collection = [[1, 2], [3, 4], [5, 6]] result = [print(progress) or [str(token) for token in document] for progress, document in enumerate(doc_collection)] print(result) # [['1', '2'], ['3', '4'], ['5', '6']] 

No considero este código bueno o legible, pero la idea es divertida.

Funciona porque la print siempre devuelve None así que print(progress) or x siempre será x (según la definición de or ).

 def show_progress(it, milestones=1): for i, x in enumerate(it): yield x processed = i + 1 if processed % milestones == 0: print('Processed %s elements' % processed) 

Simplemente aplica esta función a cualquier cosa sobre la que estés iterando. No importa si usa un bucle o una lista de comprensión y es fácil de usar en cualquier lugar sin casi ningún cambio de código. Por ejemplo:

 doc_collection = [[1, 2], [3, 4], [5, 6]] result = [[str(token) for token in document] for document in show_progress(doc_collection)] print(result) # [['1', '2'], ['3', '4'], ['5', '6']] 

Si solo desea mostrar el progreso de cada 100 documentos, escriba:

 show_progress(doc_collection, 100)