阅读 12

python 高级编程与异步IO并发编程(五)自定义序列类

5-1 python中的序列分类

序列类型的分类: 1.容器序列:list,tuple,deque(容器可以放任意类型的数据)

my_list=[]
my_list.append(1)
my_list.append("a")

复制代码

2.扁平序列:str,bytes,bytearray,arry.arry 3.可变序列:list,deque,bytearry,array 4.不可变:str,tuple,bytes

5-2 python中序列类型的abc继承关系

from collections import abc
Sequence MutableSequence
复制代码

5-3 序列的+,+=和extend方法区别

a =[1,2]
c=a+[3,4]
print(c)

#就地加
a+=[3,4]
a+=(3,4)

a.extend(range(3))
a.append([1,2])
print(a)
复制代码

5-4 实现可切片的对象


复制代码
import numbers
class Group:
    def __init__(self,group_name,company_name,staffs)
        self.group_name=name
        self.company_name=company_name
        self.staffs=staffs
        
    def __reversed__(self):
        pass
    def __getitem__(self,item):
        cls=type(self)
        if isinstance(item,slice):
            return cls(group_name=self.group_name,company_name=self.company_name,staffs=self.staffs[item])
        elif isinstance(item,numbers.Integral):
            return  cls(group_name=self.group_name,company_name=self.company_name,staffs=[self.staffs[item]])
    def __len__(self):
        pass
    def __iter__(self):
        pass
    def __contains__(self,item):
        pass
staffs=["bobbay1","imooc","bobby2","bobby3"]
group=Group(company_name="imooc",group_name="user",staffs=[""])
sub_group=group[:2]
sub_group=group[0]
queryset

复制代码

5-5 bisect维护已排序序列

import bisect
#用来处理已排序的序列,用来维持已排序的序列,升序
#二分查找
inter_list=[]
bisect.insort(inter_list,3)
bisect.insort(inter_list,2)
bisect.insort(inter_list,5)
bisect.insort(inter_list,1)
bisect.insort(inter_list,6)
print(inter_list)
print(bisect.bisect_left(inter_list,3))

#学习成绩
90-100 A
80-90 B
["ABCDE"]
print(inter_list)

复制代码

5-6 什么时候我们不该使用列表

#array,deque
#数组
import array
 #array和list的一个重要的区别,array只能存放指定的数据类型
 my_array=array.array("i")
 my_array.append(1)
 my_array.append("abc")
 
复制代码

5-7 列表推导式、生成器表达式、字典推导式

#列表生成式
#提取1——20之间的奇数
odd_list=[]
for i in range(21):
    if i %2=1:
        odd_list.append(i)

odd_list=[i for i in range(21) if i%2 == 1]
print(type(odd_list))

#逻辑复杂的情况

def hadle_item(item):
    return item*item
odd_list=[hadle_item(i) for i in range(21) if i%2 == 1]
#列表生成式性能高于列表操作
print(type(odd_list) 

#生成式表达式
odd_gen=(i for i in range(21) if i%2 == 1)  
print(type(odd_list))
odd_list=list(odd_gen)

print(type(odd_list))
print(odd_list)

#字典推导式
my_dict = {"bobby1":22,"bobby2":23,"imooc":5}
reversed_dict={value:key for key,value in my_dict.items()}
pritn(reversed_dict)

#集合推导式
# my_set = set(my_dict.keys())
my_set={key for key,value in my_dict.items()}
print(type(my_set))
print(my_set)

复制代码

5-8 本章小结

总结:自定义序列类型,python的协议,序列的abc关系,满足序列就可以切片,序列的+ 和+=和extended的关系bisect管理可排序的序列,列表推导式,生成器表达式,字典推导式.

关注下面的标签,发现更多相似文章
评论