一、序列类型分类
1、容器序列
list、tuple、deque
2、扁平序列
str、array
3、可变序列
list、deque、array
4、不可变序列
str、tuple
二、序列的abc继承关系
三、序列的+ += 以及extends区别
+ 是生成一个新的对象
+= 调用isadd 本质上还是extends,对于可变类型是在修改原来对象
extend 对于可变类型是在修改原来对象,extend( 可迭代对象)
四、实现可切片对象
class Group :
def __init__ ( self, age) :
self. age = age
def __getitem__ ( self, item) :
cls = type ( self)
if isinstance ( item, Integral) :
return cls( [ self. age[ item] ] )
elif isinstance ( item, slice ) :
return cls( self. age[ item] )
五、bisect管理可排序序列
test_list = [ ]
index = bisect. bisect_left( test_list, 3 )
bisect. insort_left( test_list, 3 )
六、列表推导式、生成器表达式、字典推导式
def func ( ) :
pass
test= [ fun( i) for i in range ( 10 ) if i > 3 ]
test= (fun( i) for i in range ( 10 ) if i > 3 )
test = { f"a{i}" : i for i in range ( 10 ) }
test = { i for i in range ( 10 ) }
七、dict常见用法
test_dict = { "name" : "hatcher" }
test_dict. setdefault( "name" : "hewitt" )
test_dict. update( age= 12 )
test_dict. update( [ ( "class" , 1 ) ] )
dict . fromkeys( [ "name" ] , "hatcher" )
from collections import UserDict、defaultdict
class TestUserDict ( UserDict) :
def __setitem__ ( self, key, value) :
super ( ) . __setitem( key, value* 2 )
result = TestUserDict( a= 1 )
class TestDefaultDict ( defaultdict) :
pass
res = TestDefaultDict( dict )
res[ "test" ]
八、dict、set原理
1、申请一块连续的空间
2、将key进行hash,然后&dict或者set长度、计算出偏移量,插入到连续空间中
3、hash计算可能发生冲突、此时需要解决冲突、将key往前取再进行hash操作。直到偏移量不重复
4、当空间不足三分之一的时候会重新申请更大的内存空间、将原来的全部复制到新的空间中。
随着数据量的增大、dict的查找效率一直保持高水平、比list高
数据的插入会影响数据的存储顺序
数据的插入会影响原来的数据顺序