Python-为什么我不能对相同的数据进行两次迭代?
为什么我不能对相同的数据进行两次迭代?
def _view(self,dbName): db = self.dictDatabases[dbName]
data = db[3]
for row in data:
print("doing this one time")
for row in data:
print("doing this two times")
这将打印“执行一次”几次(由于数据有几行),但是根本不会打印“执行两次”。
我第一次遍历数据工作正常,但是第二次当我运行最后一个列表“针对数据行”时,此操作什么都不返回……因此一次执行它却不能两次……?
仅供参考-数据是一个csv.reader对象(如果是原因)…
回答:
这是因为它data是一个迭代器,你只能使用一次迭代器。例如:
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])
但是,如果元素很多,最好使用tee()以下方法创建独立的迭代器:
import itertoolsit1, 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")
以上是 Python-为什么我不能对相同的数据进行两次迭代? 的全部内容, 来源链接: utcz.com/qa/419151.html