解释python生成器的长列表

0 python oop data-structures

我是新的python程序员,到目前为止我所理解的,"yield"关键字返回一个对象来代替生成器函数只返回生成器对象.

因此,如果我有一个包含10K项目的列表,那么我如何制作智能的pythonic解决方案,而无需在列表中附加值并使其变大.

这意味着,我将一些值附加到列表中,最后创建一个大型列表,如下所示:

def example():
    final_list = []
    for i in range(0,10000):
        final_list.append(i)
    return final_list
Run Code Online (Sandbox Code Playgroud)

这只是一个例子,而不是一个真正的问题,我使用范围()只产生循环闲来无事,在我真正的问题,有没有顺序的数据,这将是随机字符串,以及findla列表将包含10K的字符串.那么如何才能获得所有值而无需以高效的pythonic方式附加到列表中.

谢谢.

Mar*_*som 5

你的例子已经过简化了,所以让我们假装你想要10000个随机数.

有两种方法可以创建生成器.一个是yield声明:

def example():
    for i in xrange(10000):
        yield random.random()
Run Code Online (Sandbox Code Playgroud)

另一种方式是使用生成器表达式:

(random.random() for i in xrange(10000))
Run Code Online (Sandbox Code Playgroud)

您选择哪一个取决于您的代码复杂性.

  • @arnold,一个生成器无法帮助的时间,但它可以帮助记忆.完整列表从不存在于内存中,但每个元素都是在需要时生成的(因此名称为"generator"). (3认同)
  • @arnold,在您将结果附加到列表的位置,请使用yield. (3认同)