reversed()函数是返回序列seq的反向访问的迭代子。参数可以是列表,元组,字符串,不改变原对象。
在此仅举列表的例子,其他组合数据类型也合适
l=[1,2,3,4,5]
ll=reversed(l)
l
[1, 2, 3, 4, 5]
ll
<listreverseiterator object at 0x06A9E930>
for i in ll:#第一次遍历
... print i,
...
5 4 3 2 1
for i in ll:第二次遍历为空,原因见本文最后
... print i
[]
那么大家的问题来了,为什么列表的第二次的返回值是空?
That’s because reversed creates an iterator, which is already spent when you’re calling list(ll) for the second time.
The reason is that ll is not the reversed list itself, but a listreverseiterator. So when you call list(ll) the first time, it iterates over ll and creates a new list from the items output from that iterator.When you do it a second time, ll is still the original iterator and has already gone through all the items, so it doesn’t iterate over anything, resulting in an empty list.
译文:这是因为颠倒创建了一个迭代器,当你第二次调用list(ll)时,它已经被花掉了。原因是ll不是相反的列表本身,而是一个listreverseiterator。因此,当你第一次调用list(ll)时,它会遍历ll,并从迭代器的物品输出中创建一个新的列表。当你第二次做的时候,ll仍然是原来的迭代器并且已经完成了所有的项目,所以它不会迭代任何东西,导致一个空列表
相信大家都能看懂,因为生成的迭代器的问题。
迭代器不熟悉的话,可以回顾一下。
参考链接: https://blog.csdn.net/sxingming/article/details/51353379
网友评论