Python idioma de cadeia (achatar) um infinito iteráveis ??de iterables finitos? [duplicado]

StackOverflow https://stackoverflow.com/questions/120886

  •  02-07-2019
  •  | 
  •  

Pergunta

Esta questão já tem uma resposta aqui:

Suponha que tenhamos um iterador (uma uma infinita) que listas de retornos (ou iterators finitos), por exemplo um retornado por

infinite = itertools.cycle([[1,2,3]])

O que é um bom Python idioma para obter um iterador (obviamente infinita) que irá retornar cada um dos elementos da primeira iteração, então cada um a partir do segundo, etc. No exemplo acima, ele retornaria 1,2,3,1,2,3,.... O iterador é infinito, então itertools.chain(*infinite) não vai funcionar.

Relacionados

Foi útil?

Solução

A partir do Python 2.6, você pode usar itertools.chain.from_iterable :

itertools.chain.from_iterable(iterables)

Você também pode fazer isso com uma compreensão gerador aninhada:

def flatten(iterables):
    return (elem for iterable in iterables for elem in iterable)

Outras dicas

Use um gerador:

(item for it in infinite for item in it)

Os Desembala * construto em uma tupla, a fim de passar os argumentos, então não há nenhuma maneira de usá-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top