二、python序列
python中的序列包括列表,元组,字典,集合等
1.列表
- 由于列表内存的自动管理,应尽量从列表的尾部插入元素,可以提高列表的处理速度
- 列表中的元素类型可以不相同
- 列表对象的常用方法:append(),insert(),extend(),remove(),pop(),clear(),sort(),copy()
(1)列表的删除
del命令删除整个列表
(2)列表元素的增加
方法一:+号的增加并不是真正意义上的增加元素,而是生成一个新的列表
方法二:append()方法,真正在尾部添加元素,推荐使用
注意:直接修改列表的值与使用下标的方式修改列表的值,列表对象在内存中地址变化的情况是不同的。
In [23]: a=[1,5,6,2,4]
In [24]: id(a)
Out[24]: 2822589145344
In [25]: a.append(10)
In [26]: id(a)
Out[26]: 2822589145344
In [27]: a=[1,5,6,2,4,10]
In [28]: id(a)
Out[28]: 2822603593216
方法三:insert()和extend()都属于原地操作,缺点是移动量大,影响处理速度,尽量避免在列表中见插入元素。
方法四:使用乘法扩展列表,从而得到一个新的列表
(2)列表元素的删除
方法一:del 删除指定位置元素
方法二:remove()和pop(),注意两个的不同点
(3)列表元素的访问和计数
访问用index()。计数count()
(4)成员资格判断
count(),in ,not in
(6)切片 [strat:syop:step]
见书上例题
(7)列表排序和逆序
排序:sort()与sorted()不同
逆序:reverse()和reversed()不同,注意以下
# b=[1, 2, 4, 5, 6, 10]
# b=[1, 2, 4, 5, 6, 10]
In [41]: a.reverse()
In [42]: a
Out[42]: [10, 6, 5, 4, 2, 1]
In [43]: new_b=reversed(b)
In [44]: new_b
Out[44]: <list_reverseiterator at 0x2912f9f2730>
In [45]: list(new_b)
Out[45]: [10, 6, 5, 4, 2, 1]
(8)用于序列操作的常用内置函数
len(),zip(),enumerate(),熟悉书上例子
2.元组
(1)元组的创建
In [45]: a_tuple=2,
Out[45]: (2,)
In [46]: a_turple=2,3
Out[46]: (1,2)
注意:使用del删除时,只能删除整个元组,元组属于不可变序列
(2)元组的特点
- 只能使用切片访问对象,无法进行增删改等
- 元组的访问和处理速度快于列表
- 元组对不需要修改的数据进行了“写保护”,从内部上不允许修改其元素,从而使得代码更加安全
- 如果元组内包含可变对象,这样的元组不能作为字典“键”或集合的元素
(3)序列解包
见书上例子
(4)生成器表达式
- 生成器对象使用内置函数next()或者 _ _next _ _()访问下一个元素
- 生成器对象中每个元素只能访问一次
- 只能从前向后访问
3.字典
字典的键不允许重复,值可以
(1)字典的创建
a=dict()#空字典
a={'a':1,'b':2,'c':3}
dict.fromkeys(['a','b','c']) #给定键,不指名值
(2)字典元素的读取
方法一:使用get()返回指定键对应的值
方法二:items()返回键:值对
方法三:values()返回值,keys()返回键
方法四:使用序列解包读取键值对
In [85]: for key,value in a.items():
...: print(key,value,sep=':')
...:
a:1
b:2
c:3
方法五:字典元素的添加与修改
方法一:直接按键添加值,不存在就添加一个新的
方法二:update()将另一个字典的键值对全部添加到字典里,如有相同,以新添加的为准
删除方法:clear,pop(),del()
4.集合
集合无序可变
集合的创建:set()或者直接s={2,3}
集合的添加:add()
删除:pop()pop不接受参数
和remove(),clear(),del
集合的运算:交并补差以及子集测试运算符(<)
小结
1.列表,元组,字符串属于有序序列,集合,字典属于无序;元组,字符串属于不可变序列,其他三个可变
2.字典中的键不能时可变序列
3.集合中所有元素不得重复,使用集合可以快速提取出其他序列中的唯一元素
4.内置函数enumerate返回的是包含下标和元素值的元组
In [89]: for index,ch in enumerate('sddadd'):
...: print((index,ch),end=';')
...:
(0, 's');(1, 'd');(2, 'd');(3, 'a');(4, 'd');(5, 'd');
习题笔记
1.range函数返回的是一个range对象
2.成员资格判断
In [90]: [3] in[1,2,3,4]
Out[90]: False
3.sort()函数没有返回值,或者是返回值是None
4.不可以使用del删除元组中部分元素