微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法记住python迭代器中的位置?

如何解决有没有办法记住python迭代器中的位置?

__iter__当您使用对象进入for循环并返回迭代器时,将调用方法。我们通常不保留指向迭代器的名称,但是如果这样做,我们可以停止迭代,执行其他操作,然后继续进行迭代。

获取迭代器对象的最佳方法是使用内置iter函数

a_list = ['a', 'b', 'c', 'd']
iter_list = iter(a_list)

for val in iter_list:
   print(val)                # do_stuff(val)
   if val == 'b':            # some_condition!
       break

print('taking a break')      # do_stuff()

for val in iter_list:
    print(val)               # continue_doing_stuff(val)

显示

a
b
taking a break
c
d

iter(obj)只是返回的结果obj.__iter__(),该结果应该是实现.__next__()方法的迭代器。

__next__每次迭代都会调用方法,并返回对象(在这种情况下为字符)。

如果要自己调用__next__方法而不是由for循环调用,则应使用内置next函数

a_list = ['a', 'b', 'c', 'd']
iter_list = iter(a_list)
print(next(iter_list))       # do_stuff(val)
print(next(iter_list))
print('taking a break')      # do_stuff()
print(next(iter_list))       # continue_doing_stuff(val)
print(next(iter_list))

印刷品:

a
b
taking a break
c
d

解决方法

我想遍历一个可迭代的对象(比如说一个列表),并留在某个地方记住我离开的位置,以便下次调用该对象的迭代器时继续。

就像是:

for val in list:
   do_stuff(val)
   if some_condition:
       break

do_stuff()

for val in list:
    continue_doing_stuff(val)

速度很重要,考虑的清单很大。因此,保存对象并再次遍历整个列表直到找到所保存的元素不是一种选择。如果不为列表编写显式的迭代器类,是否有可能?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。