Construindo Listas com Iteradores em Python

Beginner

This tutorial is from open-source community. Access the source code

Introdução

Em Python, podemos criar uma lista usando uma variedade de métodos. Um desses métodos é usando uma função iteradora e um valor inicial (seed). Neste desafio, você será encarregado de construir uma lista usando uma função iteradora e um valor inicial.

Lista Unfold (Desdobramento de Lista)

Sua tarefa é implementar a função unfold que recebe uma função iteradora e um valor inicial (seed) como argumentos. A função iteradora aceita um argumento (seed) e deve sempre retornar uma lista com dois elementos ([value, nextSeed]) ou False para terminar. A função unfold deve usar uma função geradora (generator function), fn_generator, que usa um loop while para chamar a função iteradora e yield o value até que retorne False. Finalmente, a função unfold deve usar uma compreensão de lista (list comprehension) para retornar a lista produzida pelo gerador, usando a função iteradora.

Implemente a função unfold:

def unfold(fn, seed):
    ## your code here

Entrada (Input)

  • Uma função iteradora fn que aceita um argumento (seed) e deve sempre retornar uma lista com dois elementos ([value, nextSeed]) ou False para terminar.
  • Um valor inicial (seed) seed.

Saída (Output)

  • Uma lista que é produzida pelo gerador, usando a função iteradora.
def unfold(fn, seed):
  def fn_generator(val):
    while True:
      val = fn(val[1])
      if val == False: break
      yield val[0]
  return [i for i in fn_generator([None, seed])]
f = lambda n: False if n > 50 else [-n, n + 10]
unfold(f, 10) ## [-10, -20, -30, -40, -50]

Resumo

Neste desafio, você aprendeu como construir uma lista usando uma função iteradora e um valor inicial (seed). Você implementou a função unfold que recebe uma função iteradora e um valor inicial como argumentos e retorna uma lista que é produzida pelo gerador, usando a função iteradora.