鱼C论坛

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

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

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

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

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

x
编写函数myReversed(),模拟内置函数reversed()应该怎么做???求助各位大佬!!
最佳答案
2020-4-17 11:07:28
本帖最后由 txxcat 于 2020-4-17 12:17 编辑
  1. def myReversed(lista):
  2.     newlist=[]
  3.     for i in lista:
  4.         newlist.insert(0,i)
  5.     return iter(newlist)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-17 10:41:02 | 显示全部楼层
这不是zz题吗???
  1. return str1[::-1]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-17 10:42:34 | 显示全部楼层
reverse a list,
string, or others?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

我并不认为lz能看得懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

不懂什么是 zz 题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

多么简单的英文啊……
这写提示的作者真的很敷衍……
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-17 11:07:28 | 显示全部楼层    本楼为最佳答案   
本帖最后由 txxcat 于 2020-4-17 12:17 编辑
  1. def myReversed(lista):
  2.     newlist=[]
  3.     for i in lista:
  4.         newlist.insert(0,i)
  5.     return iter(newlist)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

  12.         self.__seq=sequence

  13.     def __iter__(self):
  14.         return self

  15.     def __length_hint__(self):
  16.         return self.__idx+1
  17.    
  18.     def __reduce__(self):
  19.         return self.__class__,(self.__seq,),self.__idx

  20.     def __next__(self):
  21.         if self.__idx:
  22.             self.__idx-=1
  23.             return self.__seq[self.__idx]
  24.         
  25.         else:
  26.             raise StopIteration

  27.     def __setstate__(self,value):
  28.         if isinstance(value,int):
  29.             self.__index=min(value,self.__index)
  30.         
  31.         else:
  32.             raise TypeError("an integer is required")
复制代码
满意请选最佳~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

你这样返回的不是一个迭代器
reversed的返回值是一个的迭代器
  1. def myreversed(arg):
  2.     return iter(arg[::-1])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

  4.        
  5. >>> reversed(n())
  6. <list_iterator object at 0x000001D233F6ED00>
  7. >>> def myreversed(arg):
  8.     return iter(arg[::-1])

  9. >>> myreversed(n())
  10. Traceback (most recent call last):
  11.   File "<pyshell#11>", line 1, in <module>
  12.     myreversed(n())
  13.   File "<pyshell#10>", line 2, in myreversed
  14.     return iter(arg[::-1])
  15. TypeError: 'n' object is not subscriptable
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

不是,返回的是对象的 __reversed__ 方法的返回值
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

还不一定,如果对象 没有 __reversed__ 方法 还可以通过索引
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

是的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-17 18:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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