2010-10-06 22 views
5

有没有一种更优雅的方式来编写下面一段Python?在列表理解中省略迭代器?

[foo() for i in range(10)] 

我希望积累在列表中富()的结果,但我不需要迭代我。要做到这一点

回答

5

一种方法是使用_

[foo() for _ in range(10)] 

这意味着同样的事情,但是按照惯例,使用_指示该指数实际上不用于任何读者。

想必foo()每次调用它时都会返回不同的内容。如果没有,它每次返回同样的事情,那么你可以:

[foo()] * 10 

复制调用foo()一次,10次为一个列表的结果。

-1

绝不更优雅,但:

[x() for x in [foo]*10] 

我想超越你必须去红宝石;)

-2

map(lambda _ : foo(), range(10))

虽然这与一个毫无意义的迭代器换你的问题我对lambda表达式有一个新的无意义的论点。

0

map将是很好,如果富()花了一个说法,但事实并非如此。所以取而代之,创建一个虚拟的λ是取一个整数参数,只是调用foo():

map(lambda i:foo(), range(10)) 

如果您对Python的3.x中,地图返回一个迭代器,而不是一个名单 - 只是构建一个列表它:

list(map(lambda i:foo(), range(10))) 
+0

Downvote?怎么来的? – PaulMcG 2010-10-06 05:53:29