我了解如何在 for 循环中使用 range()
和 zip()
等函数。但是我希望 range()
输出一个列表 - 很像 unix shell 中的 seq
。如果我运行以下代码:
a=range(10)
print(a)
输出是 range(10)
,表明它不是列表而是不同类型的对象。 zip()
打印时有类似的行为,输出类似
<zip object at "hexadecimal number">
所以我的问题是它们是什么,使它们成为这样有什么好处,以及如何在不循环遍历它们的情况下将它们的输出输出到列表中?
原文由 Michal 发布,翻译遵循 CC BY-SA 4.0 许可协议
您必须使用 Python 3。
在 Python 2 中,对象
zip
和range
确实按照您的建议运行,返回列表。它们被更改为类似 生成器 的对象,这些对象按需生成元素,而不是将整个列表扩展到内存中。一个优势是在他们的典型用例中效率更高(例如迭代它们)。“惰性”版本也存在于 Python 2.x 中,但它们具有不同的名称,即
xrange
和itertools.izip
。要一次将所有输出检索到熟悉的列表对象中,您可以简单地调用
list
来迭代和使用内容: