当前位置: 首页 > 面试题库 >

Python-为什么我不能对相同的数据进行两次迭代?

毕黎昕
2023-03-14
问题内容

为什么我不能对相同的数据进行两次迭代?

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 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")


 类似资料:
  • 问题内容: 我收到一个迭代器作为参数,并且想对值进行两次迭代。 可能吗 ?怎么样 ?签名是由我使用的框架(即Hadoop)强加的。 -编辑- 最后,该方法的真正签名是一个。我被这个Wiki页面所迷住了(实际上这是我发现的唯一不被弃用(但错误的)单词计数示例)。 问题答案: 如果要再次迭代,我们必须缓存来自迭代器的值。至少我们可以将第一次迭代和缓存结合起来: (只需要添加代码答案,就知道您在自己的注

  • 下面的python代码尝试运行同一函数两次并输出运行时: 三次测试的输出如下: 我不知道为什么输出如此不同?为什么第二次执行比第一次快?我也尝试运行五次,结果如下:

  • 问题内容: 似乎以下代码应返回true,但返回false。 这有什么意义? 问题答案: 常规()和严格()相等之间的唯一区别是,严格相等运算符禁用类型转换。由于已经在比较两个相同类型的变量,因此使用的相等运算符的类型无关紧要。 不管您使用常规相等还是严格相等,对象比较仅 在您比较相同的精确对象时得出 。 也就是说,给定,,,但。 两个不同的对象(即使它们都具有零或相同的精确属性)也永远不会相等地进

  • 我面临以下异常:中,当我试图显示一个时,该表单包含以前初始化(并显示)的 谢谢

  • 我在android工作室工作,2.1.2。 我在两个活动之间有一个神秘角色转换异常。 在第一个活动中,我有这个ArrayList: 我将arraylist(parcellable)插入到bundle中,以便在另一个活动中发送: 在第二个活动中,我将此用于恢复ArrayList 现在按照 我什么都试过了,带和不带Bundle的发送,类输出结束输出都是一样的,为什么要这样铸造呢?那我该怎么解决?? 谢

  • 我创建了的两个实例,如下所示。一个是从创建的,另一个是相同的,但在开头加上了一些附加的数字。使用方法比较它们时,它返回: 我认为添加的数字被丢弃了,并且两者给出了相同的UUID字符串值。为什么会这样?