在列表理解中省略迭代器?

时间:2010-10-06 00:31:31

标签: python list-comprehension

是否有更优雅的方式来编写以下Python?

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

我想在列表中累积foo()的结果,但我不需要迭代器i。

4 个答案:

答案 0 :(得分:5)

执行此操作的一种方法是使用_

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

这意味着完全相同的事情,但按照惯例,使用_向读者表明该索引实际上并未用于任何事情。

据推测,foo()每次调用时都会返回不同的内容。如果没有,并且每次返回相同的内容,那么您可以:

[foo()] * 10

将调用foo()的结果复制一次,10次复制到列表中。

答案 1 :(得分:0)

如果foo()接受了一个参数,那么

map会很好,但事实并非如此。因此,创建一个带有整数参数的虚拟lambda,但只调用foo():

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

如果您使用的是Python 3.x,map会返回迭代器而不是列表 - 只需用它构建一个列表:

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

答案 2 :(得分:-1)

绝不是更优雅,但是:

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

我想除此之外你必须去Ruby;)

答案 3 :(得分:-2)

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

虽然这会使用无意义的迭代器来处理你的问题,但我对lambda表达式提出了一个新的无意义的参数。