gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:49:53 26 4
gpt4 key购买 nike

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

类似于:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com