Na compreensão, a iteração de listas aninhadas deve seguir a mesma ordem que os loops for imbricados equivalentes.
Para entender, vamos dar um exemplo simples da PNL. Você deseja criar uma lista de todas as palavras de uma lista de frases em que cada frase é uma lista de palavras.
>>> 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 remover as palavras repetidas, você pode usar um conjunto {} em vez de uma 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']
ou aplique list(set(all_words))
>>> all_unique_words = list(set(all_words))
['.', 'dog', 'the', 'chases', 'barks', 'mouse', 'The', 'cat']
itertools.chain
se quiser uma lista nivelada:list(chain.from_iterable(entry for tag in tags for entry in entries if tag in entry))