什么是自定义序列

描述

 

python

 

一.项目背景

     本篇主要想给大家介绍一下我们平常用的最多数据结构序列,主要从它的分类和如何自定义序列两方面给大家讲解,属于Python高阶内容知识点,希望大家能够学有所获。

 

二.序列分类

1.容器序列:list、tuple、deque
2.扁平序列:str、bytes、bytearray、array.array
3.可变序列:list, deque,bytearray、array
4.不可变序列:str、tuple、bytes
  •  
这里我们分享一下array.array基本使用。

 

python
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)

 

python

 

三.自定义序列

1.分析abc继承关系
》》from collections import abc
》》分析Sequence相关抽象方法
》》__init__,__reversed__,__getitem__,__len__,__iter__,__contains_

 

 

python
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)

 

python
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分