# -*- coding: utf-8 -*-
"""
Created on Sun Mar 24 20:05:57 2019
@author: fengs
"""
"""
测试题(笔试,不能上机哦~)
0. 你知道 Python 基于序列的三大容器类指的是什么吗?
列表 元组 字符串
1. Python 允许我们自己定制容器,如果你想要定制一个不可变的容器(像 String),你就不能定义什么方法?
__setitem__()
__delitem__()
2. 如果希望定制的容器支持 reversed() 内置函数,那么你应该定义什么方法?
__reversed__()
3. 既然是容器,必然要提供能够查询“容量”的方法,那么请问需要定义什么方法呢?
len() <------> __len__()
4. 通过定义哪些方法使得容器支持读、写和删除的操作?
__getitem__()
__setitem__()
__delitem__()
5. 为什么小甲鱼说“在 Python 中的协议就显得不那么正式”?
协议像是指导文件,实现靠自己
"""
"""
0. 根据课堂上的例子,定制一个列表,同样要求记录列表中每个元素被访问的次数。
这一次我们希望定制的列表功能更加全面一些,比如支持 append()、pop()、extend() 原生列表所拥有的方法。
你应该如何修改呢?
要求1:实现获取、设置和删除一个元素的行为(删除一个元素的时候对应的计数器也会被删除)
要求2:增加 counter(index) 方法,返回 index 参数所指定的元素记录的访问次数
要求3:实现 append()、pop()、remove()、insert()、clear() 和 reverse() 方法(重写这些方法的时候注意考虑计数器的对应改变)
"""
"""
课堂自定义列表
"""
class CountList_ketang:
def __init__(self,*args):
self.values = [x for x in args]
self.count = {}.fromkeys(range(len(self.values)),0)
def __len__(self):
return len(self.values)
def __getitem__(self,key):
self.count[key] += 1
return self.values[key]
#a = CountList_ketang(1,2,3,4)
#print(a[1])
#print(len(a))
#print(a.count)
"""
"""
class CountList_dds0():
def __init__(self,*args):
self.values = [x for x in args]
self.count = {}.fromkeys(range(len(self.values)),0)
#要求二:访问次数
def counter(self,index):
if index < self.__len__():
return self.count[index]
else:
return None
def __len__(self):
return len(self.values)
def __getitem__(self,key):
if key < self.__len__():
self.count[key] += 1
return self.values[key]
else:
return None
def __setitem__(self,key,value):
if key < self.__len__():
self.values[key] = value
self.count[key] += 1
else:
pass
def __delitem__(self,key):
if key < self.__len__():
for each_key in self.count.keys():
if each_key >= key:
if each_key != self.__len__() - 1:
self.count[each_key] = self.count[each_key+1]
else:
pass
del self.values[key]
self.count.pop(max(self.count.keys()))
else:
pass
def append(self,value):
index = self.__len__()
self.count[index] = 0;
self.values.append(value)
def pop(self):
key = self.__len__() - 1
del self.count[key]
return self.values.pop()
def remove(self,key):
return self.__delitem__(self,key)
def insert(self,key,value):
if key > self.__len__():
return None
elif key == self.__len__():
return self.append(self,value)
elif key < self.__len__():
self.count[self.__len__()] = 0
for each_key in range(max(self.count.keys())):
print(each_key)
if each_key > key:
self.count[each_key] = self.count[each_key-1]
self.count[key] = 0;
self.values.insert(key,value)
def clear(self):
self.values.clear()
self.count.clear()
def reverse(self):
self.values.reverse()
length = self.__len__()
for i in range(length//2):
self.count[i],self.count[length-i-1] = self.count[length-i-1],self.count[i]
count_list = CountList_dds0(1,2,3,4,5)
print(count_list[0])
print(count_list[1])
print(count_list.count)
del count_list[0]
print(count_list.count)
print(count_list.counter(1))
count_list.append(111)
print(count_list.values)
print(count_list.count)
print(count_list[4])
print(count_list.counter(4))
print(count_list.pop())
print(count_list.count)
print(count_list[1])
print(count_list[1])
print('---------------------')
count_list.insert(1,22)
print(count_list.count)
print(count_list[1])
print(count_list.count)
print('---------------------')
print(count_list.values)
print(count_list.count)
count_list.reverse()
print(count_list.values)
print(count_list.count)
print('---------------------')
count_list.clear()
print(count_list.count)
print(count_list.values)