在列表理解中省略迭代器?
有没有更优雅的方式来编写下面的Python代码?
[foo() for i in range(10)]
我想将 foo() 的结果累积在一个列表中,但我不需要迭代器 i。
Is there a more elegant way to write the following piece of Python?
[foo() for i in range(10)]
I want to accumulate the results of foo() in a list, but I don't need the iterator i.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
一种方法是使用
_
:这意味着完全相同的事情,但按照惯例,使用
_
向读者表明该索引实际上并未使用对于任何事情。大概
foo()
每次调用它时都会返回不同的内容。如果没有,并且每次都返回相同的内容,那么您可以:将调用
foo()
一次、10 次的结果复制到列表中。One way to do this is to use
_
:This means exactly the same thing, but by convention the use of
_
indicates to the reader that the index isn't actually used for anything.Presumably
foo()
returns something different every time you call it. If it doesn't, and it returns the same thing each time, then you can:to replicate the result of calling
foo()
once, 10 times into a list.如果 foo() 接受一个参数,那么
map
会很好,但它没有。因此,创建一个带有整数参数的虚拟 lambda,但只调用 foo():如果您使用的是 Python 3.x,map 返回一个迭代器而不是列表 - 只需用它构造一个列表:
map
would be nice if foo() took an argument, but it doesn't. So instead, create a dummy lambda that takes an integer argument, but just calls foo():If you are on Python 3.x, map returns an iterator instead of a list - just construct a list with it:
绝不是更优雅,但是:
我认为除此之外,你还必须使用 Ruby ;)
By no means more elegant, but:
I think beyond that you have to go to Ruby ;)
map(lambda _ : foo(), range(10))
尽管这用一个无意义的迭代器 i 和 lambda 表达式的一个新的无意义参数来交换你的问题。
map(lambda _ : foo(), range(10))
although this trades your problem with a meaningless iterator i with a new meaningless argument to the lambda expression.