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返回类似序列的范围对象). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |