python中可迭代的对象和列表

其中序列和字典我们比较熟悉,在for循环中,我们经常碰到。
但很多时候我们也会见到for后面接的不是序列和字典。
for data in train_dataloader:inputs, labels = datainputs = inputs.to(device)labels = labels.to(device)preds = model(inputs)loss = criterion(preds, labels)epoch_losses.update(loss.item(), len(inputs))optimizer.zero_grad()loss.backward()optimizer.step()t.set_postfix(loss='{:.6f}'.format(epoch_losses.avg))t.update(len(inputs))
很显然这里的train_dataloader显然不是字典和列表,那么如何对这些进行迭代呢?
什么是可迭代对象?什么是迭代器?
- 如果一个对象拥有iter方法,其是可迭代对象;做个比喻,一本书可以一页一页翻,是可迭代对象;一块石头,是不可迭代对象。列表,字符串,元组,字典都是可迭代对象。iter方法:Python iter() 函数 | 菜鸟教程 (runoob.com)
如果一个对象拥有iter方法和next方法,其是迭代器;做个比喻,一个机枪弹夹有N发子弹,是一个列表,你可以随意取用弹夹里的子弹(元素),因为你可以全部看到 ;一个机枪弹夹+机枪是一个迭代器(弹夹在机枪里,看不到也取不出来),要取用某一颗子弹(元素),只有从第一颗开始,把前面的全部打出来才能取。iter方法就相当于把弹夹装机枪里的动作,封装动作;next方法就相当于机枪开枪的动作。参考:Python next() 函数 | 菜鸟教程 (runoob.com)
迭代器的特性
迭代器是一个可以记住遍历的位置的对象。
- 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。这也是它和列表最大的不同!
- 迭代器有两个基本的方法:iter() 和 next()。
- 字符串,列表或元组对象都可用于创建迭代器:
