我想迭代两个大小不同的列表,但速度不一样(我只找到并行迭代的答案)。例如,考虑两个包含相同类型元素的排序列表,我想根据元素只在一个列表中或在两个列表中,使用两个列表的公共遍历对元素执行操作。在
我知道如何使用索引来做到这一点,但是有没有一种方法可以用迭代器正确地做到这一点呢?在
我有一些关于:
list1=[...]
list2=[...]
it1=iter(list1)
it2=iter(list2)
try:
while True:
e1=it1.next()
e2=it2.next()
while compare(e1,e2):
doSomething1(e1)
e1=it1.next()
while compare(e2,e1):
doSomething2(e2)
e2=it2.next()
doSomething3(e1,e2)
except StopIteration:
pass
# do something with the rest of the list that is at end
当引发StopIteration时,我不知道哪个列表在末尾,也不知道如何访问其余元素:调用next()检查异常将使我跳过较长列表中的一个元素,直接访问e1或e2将使我再次访问较短列表中的最后一个元素。在
我可以想象出几种解决方法,比如在每个next()中使用try/except,但我的所有想法似乎都比使用索引更复杂。。。在
对于上面代码的一个简单的工作示例,可以使用
^{pr2}$
迭代器有一个
__length_hint__
,它将返回(估计)要迭代的剩余元素的数量。它的准确性取决于迭代器的类型,我不能保证它能在非CPython实现上工作。在在StopIteration捕获中,您可以检查哪个迭代器具有剩余成员,并基于该成员执行操作。在
^{pr2}$相关问题 更多 >
编程相关推荐