我了解功能如何range()
and zip()
可以在 for 循环中使用。然而我期望range()
输出一个列表 - 很像seq
在 Unix shell 中。如果我运行以下代码:
a=range(10)
print(a)
输出是range(10)
,表明它不是一个列表,而是一个不同类型的对象。zip()
打印时有类似的行为,输出类似
<zip object at "hexadecimal number">
所以我的问题是它们是什么,使它们有什么优点,以及如何将它们的输出获取到列表而不循环它们?
您必须使用 Python 3。
在 Python 2 中,对象zip
and range
确实按照您的建议行事,返回列表。他们被改为发电机 https://wiki.python.org/moin/Generators- 类似对象,根据需要生成元素,而不是将整个列表扩展到内存中。优点之一是典型用例的效率更高(例如迭代它们)。
Python 2.x 中也存在“惰性”版本,但它们具有不同的名称,即xrange
and itertools.izip
.
要立即将所有输出检索到熟悉的列表对象中,您可以简单地调用list
迭代并使用内容:
>>> list(range(3))
[0, 1, 2]
>>> list(zip(range(3), 'abc'))
[(0, 'a'), (1, 'b'), (2, 'c')]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)