这是因为数据是一个迭代器,您只能使用迭代器一次.例如:
lst = [1, 2, 3]
it = iter(lst)
next(it)
=> 1
next(it)
=> 2
next(it)
=> 3
next(it)
=> StopIteration
如果我们使用for循环遍历某些数据,则最后一个StopIteration将导致它第一次退出.如果我们再次尝试迭代,我们将继续获得StopIteration异常,因为迭代器已经被使用了.
现在第二个问题:如果我们需要多次遍历迭代器怎么办?一个简单的解决方案是创建一个包含元素的列表,我们可以根据需要多次遍历它.只要列表中的元素很少,这是正确的
data = list(db[3])
但是如果有很多元素,那么使用Python.org/2/library/itertools.html#itertools.tee” rel=”noreferrer”>tee()创建独立的迭代器是一个更好的主意:
import itertools
it1, it2 = itertools.tee(db[3], n=2) # create as many as needed
现在我们可以依次循环遍历每一个:
for e in it1:
print("doing this one time")
for e in it2:
print("doing this two times")