自定义列表
运算符和特殊方法
算术运算符 | 对应特殊方法 |
---|---|
in / not in | __ contains__(self, elem) |
[index] | __ getitem__(self, index) |
[index] = value | __ setitem__(self, index, value) |
del[index] | __ delitem__(self, index) |
需求: 自定义一个自己的列表,实现列表的操作。
完整代码:
# 自定义列表
class MyList:
# 初始化列表
def __init__(self, data = None):
self.data = None
if data is None:
self.data = []
else:
self.data = data
# 通过列表下标访问列表元素
# 切片操作(访问)
def __getitem__(self, index):
# 让本类的对象支持下标访问:
if isinstance(index, int):# 访问的是整数类型
return self.data[index]
elif type(index) is slice:# 访问的是切片类型(selice:切片类型)
print("切片的起始值:",index.start)
print("切片的结束值:",index.stop)
print("切片的步长:",index.step)
return self.data[index]
# 通过列表下标更改列表元素
def __setitem__(self, index, value):
self.data[index] = value
# 判断传入的元素是否在列表中
def __contains__(self, item):
print(item,"是否在列表元素中:")
return self.data.__contains__(item)
# 向列表中添加元素
def append(self, item):
self.data.append(item)
# 删除并返回最后一个元素
def pop(self, index=-1):
return self.data.pop(index)
def __delitem__(self, index):
del self.data[index]
def __str__(self):
return str(self.data)
if __name__ == '__main__':
my_list = MyList([1,2,3,4,5,6,7,8,9,10])
print("打印列表my_list:",my_list)
# 通过下标访问元素
print("下标为1的元素为:",my_list[1])
# 通过下标更改元素
my_list[1] = 100
print("下标为1的元素为:",my_list[1])
# 判断元素是否在列表中
print(1 in my_list)
# 向列表中增加一个元素
my_list.append(500)
print("打印列表my_list:",my_list)
# 通过切片访问元素
print("列表中下标1-5,步长为2的元素为:",my_list[1:5:2])
# 删除并返回最后一个元素
my_list.pop()
print("打印列表my_list:",my_list)
# 删除del
del my_list[-1] # 必须定义__delitem__
print("打印列表my_list:",my_list)
打印结果:
打印列表my_list: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
下标为1的元素为: 2
下标为1的元素为: 100
1 是否在列表元素中:
True
打印列表my_list: [1, 100, 3, 4, 5, 6, 7, 8, 9, 10, 500]
切片的起始值: 1
切片的结束值: 5
切片的步长: 2
列表中下标1-5,步长为2的元素为: [100, 4]
打印列表my_list: [1, 100, 3, 4, 5, 6, 7, 8, 9, 10]
打印列表my_list: [1, 100, 3, 4, 5, 6, 7, 8, 9]