Python 笔记(03)— 列表和迭代器区别

1. 列表和迭代器区别

  • 列表不论遍历多少次,表头位置始终是第一个元素;
  • 迭代器遍历结束后,不再指向原来的表头位置,而是为最后元素的下一个位置;

通过 type 关键字可以看到列表和迭代器的类型是不同的。

In [1]: a = [1,2,3]

In [2]: b = iter(a)

In [3]: type(a)
Out[3]: list

In [4]: type(b)
Out[4]: list_iterator

通过 for 循环迭代列表和迭代器,

In [6]: for i in a:
   ...:     print(i)
   ...:     
1
2
3

In [7]: for j in b:
   ...:     print(j)
   ...:     
1
2
3

In [8]: for i in a:
   ...:     print(i)
   ...:     
1
2
3

In [9]: for j in b:
   ...:     print(j)
   ...:     

In [10]: 

可以发现:

  • 列表每次迭代都是从第一个元素开始;
  • 而迭代器在迭代结束后再次迭代就不会有任何值。因为一旦迭代结束,就指向迭代器最后一个元素的下一个位置;

只有迭代器对象才能与内置函数 next 结合使用, next 一次,迭代器就前进一次,指向一个新的元素。所以,要想迭代器 b 重新指向 a 的表头,需要重新创建一个新的迭代器。

In [10]: b = iter(a)

In [11]: next(b)
Out[11]: 1

In [12]: next(b)
Out[12]: 2

In [13]: next(b)
Out[13]: 3

In [14]: next(b)
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
<ipython-input-14-adb3e17b0219> in <module>
----> 1 next(b)

StopIteration: 

In [15]: 

需要注意,我们无法通过调用 len 获得迭代器的长度,只能迭代到最后一个末尾元素时,才知道其长度。

2. 总结

  • 遍历列表,表头位置始终不变;
  • 遍历迭代器,表头位置相应改变;
  • next 函数执行一次,迭代对象指向就前进一次;
  • StopIteration 触发时,意味着已到迭代器尾部;
  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值