fc5igm 发表于 2021-6-15 22:42:39

关于list方法的提问

本帖最后由 fc5igm 于 2021-6-15 22:44 编辑

class Nstr(str):
    def __sub__(self,other):
      self.list=list(self)
      for other in self.list:
            self.list.remove(other)
      return ''.join(self.list)

>>> a
'I love FishC.com!iiiiiiii'
>>> list(a)
['I', ' ', 'l', 'o', 'v', 'e', ' ', 'F', 'i', 's', 'h', 'C', '.', 'c', 'o', 'm', '!', 'i', 'i', 'i', 'i', 'i', 'i', 'i', 'i']
>>> a.list
['e', ' ', 'F', 's', 'C', 'c', 'o', 'm', 'i', 'i', 'i', 'i']
同样是调用list类,为什么list(a)正常,self.list就是这么诡异的东西?

Twilight6 发表于 2021-6-15 22:55:30



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

fc5igm 发表于 2021-6-15 22:59:19

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

...

class Nstr(str):
    def __init__(self,string):
      self.string=string
      self.alist=list(self.string)
    def __sub__(self,other):

      for other in self.alist:
            self.alist.remove(other)
      return ''.join(self.alist)

>>> a=Nstr('abc')
>>> b=Nstr('b')
>>> a-b
'b'
这个样子。看起来remove没有正常运行。但是也没有报错?

fc5igm 发表于 2021-6-15 23:03:04

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

...

class Nstr(str):
    def __init__(self,string):
      self.string=string
      self.alist=list(self.string)
    def __sub__(self,other):

      for other in self.alist:
            self.alist.remove(other)
            print(self.alist)
      return ''.join(self.alist)

>>> a=Nstr('abc')
>>> b=Nstr('b')
>>> a-b
['b', 'c']
['b']
'b'
为什么会这样?不是应该摘除'b'吗?怎么变成了保留'b'?

Twilight6 发表于 2021-6-15 23:08:21

fc5igm 发表于 2021-6-15 23:03
为什么会这样?不是应该摘除'b'吗?怎么变成了保留'b'?


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

for i in other:
    self.alist.remove(i)

fc5igm 发表于 2021-6-15 23:15:35

Twilight6 发表于 2021-6-15 23:08
你把 other 拿去接收循环了,把 for 循环改成这样就正常了:

谢谢
页: [1]
查看完整版本: 关于list方法的提问