鱼C论坛

 找回密码
 立即注册
查看: 1705|回复: 0

[学习笔记] A-24-魔法方法定制序列

[复制链接]
发表于 2018-7-18 20:57:08 | 显示全部楼层 |阅读模式

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

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

x
  1. #coding = UTF-8

  2. #编写一个不可改变的自定义列表,要求记录列表中每个元素被访问的次数
  3. #用字典实现,每个key对应value值

  4. class Mycountlist:
  5.     def __init__(self,*args):
  6.         self.values = [x for x in args]
  7.         self.count = dict.fromkeys(range(len(self.values)),0)
  8.         
  9.     def __getitem__(self,key):
  10.         self.values[key]+=1
  11.         return self.values[key]
  12.    
  13.     def __len__(self):
  14.         return len(self.values)




  15. #1.实现获取、设置和删除一个元素的行为(元素删除的同时对应的计数器也会被删除)
  16. #2.增加counter(index)方法,返回index参数所指定的元素访问次数
  17. #3.实现append()、pop()、remove()、clear()、insert()和reverse()方法
  18.     #注意计数器的对应改变
  19. class CountList(list):
  20.     def __init__(self, *args):
  21.         super().__init__(args)
  22.         self.count = []
  23.         for i in args:
  24.             self.count.append(0)

  25.     def __len__(self):
  26.         return len(self.count)

  27.     def __getitem__(self, key):
  28.         self.count[key] += 1
  29.         return super().__getitem__(key)

  30.     def __setitem__(self, key, value):
  31.         self.count[key] += 1
  32.         super().__setitem__(key, value)

  33.     def __delitem__(self, key):
  34.         del self.count[key]
  35.         super().__delitem__(key)

  36.     def counter(self, key):
  37.         return self.count[key]

  38.     def append(self, value):
  39.         self.count.append(0)
  40.         super().append(value)

  41.     def pop(self, key=-1):
  42.         del self.count[key]
  43.         return super().pop(key)

  44.     def remove(self, value):
  45.         key = super().index(value)
  46.         del self.count[key]
  47.         super().remove(value)

  48.     def insert(self, key, value):
  49.         self.count.insert(key, 0)
  50.         super().insert(key, value)

  51.     def clear(self):
  52.         self.count.clear()
  53.         super().clear()

  54.     def reverse(self):
  55.         self.count.reverse()
  56.         super().reverse()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 19:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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