加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python-3.x – 为什么范围反转时range_iterator?

发布时间:2020-12-20 11:50:00 所属栏目:Python 来源:网络整理
导读:我可以下标范围对象: r = range(4) r range(0,4) r[3]3 for i in r: print(i)0123 list(r)[0,1,2,3] 但是,如果我在相同的范围对象上调用reverse: r = reversed(range(4)) rrange_iterator object at memaddr for i in r: print(i)3210 r[3]TypeError: 'ran
我可以下标范围对象:

>>> r = range(4)
>>> r 
range(0,4)
>>> r[3]
3
>>> for i in r:
    print(i)

0
1
2
3
>>> list(r)
[0,1,2,3]

但是,如果我在相同的范围对象上调用reverse:

>>> r = reversed(range(4))
>>> r
<range_iterator object at memaddr>
>>> for i in r:
    print(i)
3
2
1
0
>>> r[3]
TypeError: 'range_iterator' object is not subscriptable         # ?
>>> range(r)
TypeError: 'range_iterator' cannot be interpreted as an integer # ?
>>> list(r)
[]          # ? uhmm

嗯……表现得像发电机但不太有用.

有没有理由反转范围对象不像正常的生成器/迭代器那样嘎嘎叫?

解决方法

reverse函数返回迭代器,而不是序列.这就是它的设计方式.你看到的range_iterator基本上就是你想要的反转范围.

要获得反向序列而不是反向迭代器,请使用“外星人笑脸”切片:r [:: – 1](其中r是从范围获得的值).这适用于Python 2(其中range返回列表)和Python 3(其中range返回类似序列的范围对象).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读