是否有更优雅的方式来编写以下Python?
[foo() for i in range(10)]
我想在列表中累积foo()的结果,但我不需要迭代器i。
答案 0 :(得分:5)
执行此操作的一种方法是使用_
:
[foo() for _ in range(10)]
这意味着完全相同的事情,但按照惯例,使用_
向读者表明该索引实际上并未用于任何事情。
据推测,foo()
每次调用时都会返回不同的内容。如果没有,并且每次返回相同的内容,那么您可以:
[foo()] * 10
将调用foo()
的结果复制一次,10次复制到列表中。
答案 1 :(得分:0)
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表达式提出了一个新的无意义的参数。