理解 Python 中不带方括号的列表推导式
您可能已经注意到,在使用列表推导式时,有时可以省略方括号 [] Python,如下例所示:
''.join( str(_) for _ in xrange(10) )
这种行为可能看起来令人费解,但这是因为括号内的表达式实际上是生成器表达式,而不是列表推导式。
生成器表达式与列表推导式
生成器表达式在语法上类似于列表推导式,但它们使用括号而不是方括号。与在内存中创建新列表的列表推导式不同,生成器表达式根据需要一次生成一个元素。
这种差异在某些情况下非常显着,例如当您正在使用的可迭代对象很大或具有无限多个元素。在这种情况下,生成器表达式比列表理解更节省内存且速度更快。
性能注意事项
但是,请务必注意这种差异性能上的影响可能并非在所有情况下都很明显。例如,如果您正在使用小型迭代器,则从生成器表达式创建列表的开销可能会超过其内存效率的好处。
在 ''.join() 的特定情况下,使用列表理解实际上既更快又更节省内存。这是因为 join 需要对数据进行两次传递,因此它受益于立即可用的真实列表。
选择最佳方法的提示
当决定时是否使用生成器表达式或列表理解,请考虑以下因素:
最终,由您决定哪种方法最适合您的具体情况。
以上是列表推导式与生成器表达式:何时在 Python 中使用括号而不是方括号?的详细内容。更多信息请关注PHP中文网其他相关文章!