鱼C论坛

 找回密码
 立即注册
查看: 1403|回复: 5

[已解决]关于list方法的提问

[复制链接]
发表于 2021-6-15 22:42:39 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 fc5igm 于 2021-6-15 22:44 编辑
  1. class Nstr(str):
  2.     def __sub__(self,other):
  3.         self.list=list(self)
  4.         for other in self.list:
  5.             self.list.remove(other)
  6.         return ''.join(self.list)
复制代码
  1. >>> a
  2. 'I love FishC.com!iiiiiiii'
  3. >>> list(a)
  4. ['I', ' ', 'l', 'o', 'v', 'e', ' ', 'F', 'i', 's', 'h', 'C', '.', 'c', 'o', 'm', '!', 'i', 'i', 'i', 'i', 'i', 'i', 'i', 'i']
  5. >>> a.list
  6. ['e', ' ', 'F', 's', 'C', 'c', 'o', 'm', 'i', 'i', 'i', 'i']
复制代码

同样是调用list类,为什么list(a)正常,self.list就是这么诡异的东西?
最佳答案
2021-6-15 23:08:21
fc5igm 发表于 2021-6-15 23:03
为什么会这样?不是应该摘除'b'吗?怎么变成了保留'b'?



你把 other 拿去接收循环了,把 for 循环改成这样就正常了:

  1. for i in other:
  2.     self.alist.remove(i)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-15 22:55:30 | 显示全部楼层


不建议 list 直接拿来作为变量名,而且你都没有调用 __sub__ 不会有这种输出结果的,你拷贝的不完全

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

使用道具 举报

 楼主| 发表于 2021-6-15 22:59:19 | 显示全部楼层
Twilight6 发表于 2021-6-15 22:55
不建议 list 直接拿来作为变量名,而且你都没有调用 __sub__ 不会有这种输出结果的,你拷贝的不完全

...

  1. class Nstr(str):
  2.     def __init__(self,string):
  3.         self.string=string
  4.         self.alist=list(self.string)
  5.     def __sub__(self,other):

  6.         for other in self.alist:
  7.             self.alist.remove(other)
  8.         return ''.join(self.alist)
复制代码
  1. >>> a=Nstr('abc')
  2. >>> b=Nstr('b')
  3. >>> a-b
  4. 'b'
复制代码

这个样子。看起来remove没有正常运行。但是也没有报错?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-15 23:03:04 | 显示全部楼层
Twilight6 发表于 2021-6-15 22:55
不建议 list 直接拿来作为变量名,而且你都没有调用 __sub__ 不会有这种输出结果的,你拷贝的不完全

...
  1. class Nstr(str):
  2.     def __init__(self,string):
  3.         self.string=string
  4.         self.alist=list(self.string)
  5.     def __sub__(self,other):

  6.         for other in self.alist:
  7.             self.alist.remove(other)
  8.             print(self.alist)
  9.         return ''.join(self.alist)
复制代码
  1. >>> a=Nstr('abc')
  2. >>> b=Nstr('b')
  3. >>> a-b
  4. ['b', 'c']
  5. ['b']
  6. 'b'
复制代码

为什么会这样?不是应该摘除'b'吗?怎么变成了保留'b'?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-15 23:08:21 | 显示全部楼层    本楼为最佳答案   
fc5igm 发表于 2021-6-15 23:03
为什么会这样?不是应该摘除'b'吗?怎么变成了保留'b'?



你把 other 拿去接收循环了,把 for 循环改成这样就正常了:

  1. for i in other:
  2.     self.alist.remove(i)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-15 23:15:35 | 显示全部楼层
Twilight6 发表于 2021-6-15 23:08
你把 other 拿去接收循环了,把 for 循环改成这样就正常了:

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 11:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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