一.项目背景
本篇主要想给大家介绍一下我们平常用的最多数据结构序列,主要从它的分类和如何自定义序列两方面给大家讲解,属于Python高阶内容知识点,希望大家能够学有所获。
二.序列分类
1.容器序列:list、tuple、deque
2.扁平序列:str、bytes、bytearray、array.array
3.可变序列:list, deque,bytearray、array
4.不可变序列:str、tuple、bytes
这里我们分享一下array.array基本使用。
from array import array
#创建array,类型为无符号整型
myarr = array("I")
#添加元素5
myarr.append(5)
#添加元素6
myarr.append(6)
#添加元素4
myarr.append(4)
#添加元素3
myarr.append(3)
#输出array
print(myarr)
#删除最后一个元素
myarr.pop()
#输出array
print(myarr)
三.自定义序列
1.分析abc继承关系
》》from collections import abc
》》分析Sequence相关抽象方法
》》__init__,__reversed__,__getitem__,__len__,__iter__,__contains_
import numbers
class Stus:
#初始化操作
def __init__(self, school_name, study_name, students):
#初始化学校名称
self.school_name = school_name
#初始化学习小组名称
self.study_name = study_name
#初始化学生名单
self.students = students
#反转序列
def __reversed__(self):
self.students.reverse()
#获取元素
def __getitem__(self, item):
#获取类名称类型
cls = type(self)
#判断item是否为切片类型,主要目的是让序列支持切片操作
if isinstance(item, slice):
#初始化对象
return cls(school_name=self.school_name, study_name=self.study_name, students=self.students[item])
#判断item是否为整型类型,主要目的是让序列支持切片操作
elif isinstance(item, numbers.Integral):
#初始化对象
return cls(school_name=self.school_name, study_name=self.study_name, students=[self.students[item]])
#返回学生名单长度
def __len__(self):
return len(self.students)
#转换为可迭代对象
def __iter__(self):
return iter(self.students)
#判断是否含有该对象
def __contains__(self, item):
#判断是否存在
if item in self.students:
#存在返回True
return True
else:
#不存在返回False
return False
#初始化学生名单
students = ["zhangsan", "lisi", "wangwu", "zhaoliu"]
#初始化对象
stus = Stus(school_name="第一中学", study_name="Physics", students=students)
#反转对象
reversed(stus)
#输出提示信息
print('*'*30)
#输出对象长度
print(len(stus))
#输出提示信息
print('*'*30)
#使用切片获取对象,遍历每个对象
for stu in stus[:2]:
#输出对象
print(stu)
#输出提示信息
print('*'*30)
#判断对象是否存在
if "zhangsan" in stus:
print(1)
else:
print(0)
#输出提示信息
print('*'*30)
#遍历每个对象
for stu in stus:
#输出对象
print(stu)
全部0条评论
快来发表一下你的评论吧 !