鱼C论坛

 找回密码
 立即注册
查看: 1872|回复: 13

[已解决]怎么编写函数来模拟内置函数reversed()

[复制链接]
发表于 2020-4-17 10:39:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
编写函数myReversed(),模拟内置函数reversed()应该怎么做???求助各位大佬!!
最佳答案
2020-4-17 11:07:28
本帖最后由 txxcat 于 2020-4-17 12:17 编辑
def myReversed(lista):
    newlist=[]
    for i in lista:
        newlist.insert(0,i)
    return iter(newlist)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-17 10:41:02 | 显示全部楼层
这不是zz题吗???
return str1[::-1]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-17 10:42:34 | 显示全部楼层
reverse a list,
string, or others?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-17 10:44:00 | 显示全部楼层

我并不认为lz能看得懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-17 10:46:14 From FishC Mobile | 显示全部楼层
qiuyouzhi 发表于 2020-4-17 10:41
这不是zz题吗???

不懂什么是 zz 题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-17 10:47:37 From FishC Mobile | 显示全部楼层
qiuyouzhi 发表于 2020-4-17 10:44
我并不认为lz能看得懂

多么简单的英文啊……
这写提示的作者真的很敷衍……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-17 11:07:28 | 显示全部楼层    本楼为最佳答案   
本帖最后由 txxcat 于 2020-4-17 12:17 编辑
def myReversed(lista):
    newlist=[]
    for i in lista:
        newlist.insert(0,i)
    return iter(newlist)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-17 11:09:29 | 显示全部楼层
class reversed:
    def __new__(cls,sequence,/):
        if hasattr(sequence,'__reversed__'):
            return sequence.__reversed__()
        
        return object.__new__(cls)

    def __init__(self,sequence,/):
        if hasattr(sequence,'__getitem__'):
            self.__idx=len(sequence)

        else:
            raise TypeError(f"'{sequence.__class__.__name__}' object is not reversible")

        self.__seq=sequence

    def __iter__(self):
        return self

    def __length_hint__(self):
        return self.__idx+1
    
    def __reduce__(self):
        return self.__class__,(self.__seq,),self.__idx

    def __next__(self):
        if self.__idx:
            self.__idx-=1
            return self.__seq[self.__idx]
        
        else:
            raise StopIteration

    def __setstate__(self,value):
        if isinstance(value,int):
            self.__index=min(value,self.__index)
        
        else:
            raise TypeError("an integer is required")
满意请选最佳~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-4-17 11:10:27 | 显示全部楼层
qiuyouzhi 发表于 2020-4-17 10:41
这不是zz题吗???

你这样返回的不是一个迭代器
reversed的返回值是一个的迭代器
def myreversed(arg):
    return iter(arg[::-1])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-17 13:12:25 | 显示全部楼层
sunrise085 发表于 2020-4-17 11:10
你这样返回的不是一个迭代器
reversed的返回值是一个的迭代器

如果硬要说的话:
>>> class n:
        def __reversed__(self):
                return [1,2,3].__iter__()

        
>>> reversed(n())
<list_iterator object at 0x000001D233F6ED00>
>>> def myreversed(arg):
    return iter(arg[::-1])

>>> myreversed(n())
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    myreversed(n())
  File "<pyshell#10>", line 2, in myreversed
    return iter(arg[::-1])
TypeError: 'n' object is not subscriptable
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-17 13:13:53 | 显示全部楼层
sunrise085 发表于 2020-4-17 11:10
你这样返回的不是一个迭代器
reversed的返回值是一个的迭代器

不是,返回的是对象的 __reversed__ 方法的返回值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-17 13:18:06 | 显示全部楼层
zltzlt 发表于 2020-4-17 13:13
不是,返回的是对象的 __reversed__ 方法的返回值

还不一定,如果对象 没有 __reversed__ 方法 还可以通过索引
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-17 13:26:35 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-4-17 13:18
还不一定,如果对象 没有 __reversed__ 方法 还可以通过索引

是的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 14:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表