python中可迭代的对象和列表

可迭代对象 - 图1

其中序列和字典我们比较熟悉,在for循环中,我们经常碰到。

但很多时候我们也会见到for后面接的不是序列和字典。

  1. for data in train_dataloader:
  2. inputs, labels = data
  3. inputs = inputs.to(device)
  4. labels = labels.to(device)
  5. preds = model(inputs)
  6. loss = criterion(preds, labels)
  7. epoch_losses.update(loss.item(), len(inputs))
  8. optimizer.zero_grad()
  9. loss.backward()
  10. optimizer.step()
  11. t.set_postfix(loss='{:.6f}'.format(epoch_losses.avg))
  12. t.update(len(inputs))

很显然这里的train_dataloader显然不是字典和列表,那么如何对这些进行迭代呢?

什么是可迭代对象?什么是迭代器?

  1. 如果一个对象拥有iter方法,其是可迭代对象;做个比喻,一本书可以一页一页翻,是可迭代对象;一块石头,是不可迭代对象。列表,字符串,元组,字典都是可迭代对象。iter方法:Python iter() 函数 | 菜鸟教程 (runoob.com)
  2. 如果一个对象拥有iter方法和next方法,其是迭代器;做个比喻,一个机枪弹夹有N发子弹,是一个列表,你可以随意取用弹夹里的子弹(元素),因为你可以全部看到 ;一个机枪弹夹+机枪是一个迭代器(弹夹在机枪里,看不到也取不出来),要取用某一颗子弹(元素),只有从第一颗开始,把前面的全部打出来才能取。iter方法就相当于把弹夹装机枪里的动作,封装动作;next方法就相当于机枪开枪的动作。参考:Python next() 函数 | 菜鸟教程 (runoob.com)

    迭代器的特性

  3. 迭代器是一个可以记住遍历的位置的对象。

  4. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。这也是它和列表最大的不同!
  5. 迭代器有两个基本的方法:iter() 和 next()。
  6. 字符串,列表或元组对象都可用于创建迭代器: