代码
# 切片[start:end:step]
"""
start: 切片开始位置,默认为0
end: 切片截至位置(不包含该位置),默认列表长度 len(列表)
step: 切片的步长,默认为1
当step为负整数,表示反向切片,这时start应该比end的值大
切片会返回一个新的列表
"""
alist = [3, 4, 5, 6, 7, 9, 11, 13, 15, 17]
print(alist[::]) # 返回包含原列表中所有元素的新列表 # [3, 4, 5, 6, 7, 9, 11, 13, 15, 17]
print(alist[::-1]) # 返回包含原列表中所有元素的 倒序 列表 # [17, 15, 13, 11, 9, 7, 6, 5, 4, 3]
print(alist[::2]) # 隔step-1 取一个, 获取偶数位置的值 # [3, 5, 7, 11, 15]
print(alist[1::2]) # 从下标1开始(包含)截取 隔step -1 取一个, 获取奇数位置列表 # [4, 6, 9, 13, 17]
print(alist[3:6]) # 从下标3开始(包含)截取数据,至下标6(不包含)结束 # [6,7,9]
print(alist[0:110]) # 结束位置大于列表长度,从列表尾部截断 [3, 4, 5, 6, 7, 9, 11, 13, 15, 17]
print(alist[100:0]) # 起始位置大于列表长度,返回空列表[]
# 实现可切片对象
class Group:
def __init__(self, group_name, company_name, staffs):
self.group_name = group_name
self.company_name = company_name
self.staffs = staffs
def __reversed__(self):
self.staffs.reverse()
return self.staffs
def __getitem__(self, item):
"""实现切片对象的关键"""
cls = type(self)
# 判断是切片类型,当传入[start:end:step] 语法将自动初始化slice 类
if isinstance(item, slice):
return cls(self.group_name, self.company_name, self.staffs[item])
elif isinstance(item, int):
return cls(self.group_name, self.company_name, [self.staffs[item]])
def __len__(self):
return len(self.staffs)
def __iter__(self):
return iter(self.staffs)
def __contains__(self, item):
return True if item in self.staffs else False
group = Group("imooc", "user", ["1","2","3"])
print(group[0:2]) # 调用 __getitem__
print(group[1])
print("1" in group) # 调用的是 __contains__方法
print(reversed(group)) # 调用的是 __reversed__
for i in group: # 调用 __iter__
print(i)
print(len(group) ) # 调用 __len__