作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想遍历一个可迭代对象(比方说,一个列表)并在某个时刻记住我离开的位置,以便在下次调用该对象的迭代器时继续。
类似于:
for val in list:
do_stuff(val)
if some_condition:
break
do_stuff()
for val in list:
continue_doing_stuff(val)
速度很重要,考虑的列表非常大。因此,保存对象并再次遍历整个列表直到找到保存的元素不是一种选择。如果不为列表编写显式迭代器类,这是否可能?
最佳答案
__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
关于python - 有没有办法记住 python 迭代器中的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21594302/
我是一名优秀的程序员,十分优秀!