En comprensión, la iteración de listas anidadas debe seguir el mismo orden que los bucles for imbricados equivalentes.
Para entenderlo, tomaremos un ejemplo sencillo de PNL. Desea crear una lista de todas las palabras a partir de una lista de oraciones donde cada oración es una lista de palabras.
>>> list_of_sentences = [['The','cat','chases', 'the', 'mouse','.'],['The','dog','barks','.']]
>>> all_words = [word for sentence in list_of_sentences for word in sentence]
>>> all_words
['The', 'cat', 'chases', 'the', 'mouse', '.', 'The', 'dog', 'barks', '.']
Para eliminar las palabras repetidas, puede utilizar un conjunto {} en lugar de una lista []
>>> all_unique_words = list({word for sentence in list_of_sentences for word in sentence}]
>>> all_unique_words
['.', 'dog', 'the', 'chase', 'barks', 'mouse', 'The', 'cat']
o aplicar list(set(all_words))
>>> all_unique_words = list(set(all_words))
['.', 'dog', 'the', 'chases', 'barks', 'mouse', 'The', 'cat']
itertools.chain
si desea una lista plana:list(chain.from_iterable(entry for tag in tags for entry in entries if tag in entry))