python遍历map_python中,map()对象,只能循环遍历一轮,之后为空的原因

学习python,按照之前编程的思路,写了如下代码

A_object = map(str,range(3))

A_list = list(A_object)

B_list = list(A_object)

观察A_list,其值为  ['1','2','3']

观察B_list,其值为  []

也就是说,A_list获取了一次A_object的值后, A_object就变为空了。

这是为何呢?

后来找了下资料,发现原因了。

这是由于,map函数返回的,是一个“可迭代对象”。

这种对象,从数据结构上类似于单向链表, ob_1->bo_2->bo_3->....

循环取得对象中的值 ,实际上是会调用内部函数__next__,将数据指向下一个元素。

当多次调用,直到__next__指向空,此时可迭代对象(链表) 就算到终点了,不能再用了。

类似于 list(A_object) 或者 for num in A_object 这样的语句,就是调用了迭代器,执行了__next__,消耗了迭代对象。所以,再次使用A_object后,会发现它已经空了。

实验:

>>A_object = map(str,range(3))

>>num = A_object.__next__()

>>num

'0'

>>num = A_object.__next__()

>>num

'1'

>>A_list = List(A_object)

>>A_list

['2']

#此时,A_object已经指向最末尾,空元素了。再次调用next试试

>>num = A_object.__next__()

Traceback( most recent call last):

Filr "" ,line 1 , in

StopIteration

可见,该对象已经到了终点了,不能用了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值