对容器执行多次迭代的正确方法是什么?来自 python 文档:
迭代器 - 容器对象(例如列表)产生一个全新的对象
每次将迭代器传递给 iter() 函数或在迭代器中使用它时
for 循环。使用迭代器尝试这样做只会返回相同的结果
耗尽前一个迭代过程中使用的迭代器对象,使得
它看起来像一个空容器。
该协议的目的是一旦迭代器的 next() 方法
引发 StopIteration,它将在后续调用中继续这样做。
不遵守此属性的实现将被视为已损坏。
(这个约束是在Python 2.3中添加的;在Python 2.2中,各种
迭代器根据此规则被破坏。)
如果我有这个代码:
slist = [1,2,3,4]
rlist = reversed(slist)
list(rlist)
#[4,3,2,1]
tuple(rlist)
#()
迭代“rlist”两次最简单、最正确的方法是什么?
rlist = list(reversed(slist))
然后根据需要多次迭代。这个技巧的适用范围更广;每当您需要多次迭代迭代器时,请将其转换为列表。这是一个代码片段,我出于这个目的不断将其复制粘贴到不同的项目中:
def tosequence(it):
"""Turn iterable into a sequence, avoiding a copy if possible."""
if not isinstance(it, collections.Sequence):
it = list(it)
return it
(Sequence
是列表、元组和许多自定义列表类对象的抽象类型。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)