假期第(7)天
Python序列概述
l Python序列类似于其他语言中的数组,但功能要强大
很多
l Python中常用的序列结构有列表、元组、字符串,字
典、集合以及range等对象也支持很多类似的操作
l 列表、元组、字符串支持双向索引,第一个元素下标
为0,第二个元素下标为1,以此类推;最后一个元素
下标为-1,倒数第二个元素下标为-2,以此类推
Python序列概述4
Python序列概述
有序序列
无序序列
列表
元组
字符串
字典
集合
range、zip、map、
enumerate等
可变序列
不可变序列
Python序列概述5
Python序列概述
列表
元组
字典
集合
类型名称
list
tuple
dict
set
定界符
方括号[]
圆括号()
大括号{}
大括号{}
是否可变
是
否
是
是
是否有序
是
是
否
否
是否支持下标
是(使用序号作为下标) 是(使用序号
作为下标)
是(使用“键”作为
下标)
否
元素分隔符
逗号
逗号
逗号
逗号
对元素形式的要求
无
无
键:值
必须可哈希
对元素值的要求
无
无
“键”必须可哈希
必须可哈希
元素是否可重复
是
是
“键”不允许重复,
“值”可以重复
否
元素查找速度
非常慢
很慢
非常快
非常快
新增和删除元素速度 尾部操作快
其他位置慢
不允许
快
快
Python序列概述6
列表
l 列表是Python中内置有序、可变序列,列表的所有元
素放在一对中括号"[]"中,并使用逗号分隔开
l 当列表元素增加或删除时,列表对象自动进行扩展或收缩内
存,保证元素之间没有缝隙
l 在Python中,一个列表中的数据类型可以各不相同,可以同
时分别为整数、实数、字符串等基本类型,甚至是列表、元
组、字典、集合以及其他自定义类型的对象
[10, 20, 30, 40]
['crunchy frog', 'ram bladder', 'lark vomit']
['spam', 2.0, 5, [10, 20]]
[['file1', 200,7], ['file2', 260,9]]
列表与列表推导式7
列表常用方法
方法
说明
lst.append(x)
将元素x添加至列表lst尾部
lst.extend(L)
将列表L中所有元素添加至列表lst尾部
lst.insert(index, x)
在列表lst指定位置index处添加元素x,该位置后面的所有元素后移一
个位置
lst.remove(x)
在列表lst中删除首次出现的指定元素,该元素之后的所有元素前移一
个位置
lst.pop([index])
删除并返回列表lst中下标为index(默认为-1)的元素
lst.clear()
删除列表lst中所有元素,但保留列表对象
lst.index(x)
返回列表lst中第一个值为x的元素的下标,若不存在值为x的元素则抛
出异常
lst.count(x)
返回指定元素x在列表lst中的出现次数
lst.reverse()
对列表lst所有元素进行逆序
lst.sort(key=None,
reverse=False)
对列表lst中的元素进行排序,key用来指定排序依据,reverse决定升
序(
False)还是降序(
True)
lst.copy()
返回列表lst的浅复制
列表与列表推导式8
列表创建与删除
l 使用"="直接将一个列表赋值给变量即可创建列表对
象
>>> a_list = ['a', 'b', 'mpilgrim', 'z', 'example']
>>> a_list = []
#创建空列表
l 也可以使用list()函数将元组、range对象、字符串或
其他类型的可迭代对象类型的数据转换为列表
>>> a_list = list((3,5,7,9,11))
>>> a_list
[3, 5, 7, 9, 11]
>>> list(range(1,10,2))
[1, 3, 5, 7, 9]
>>> list('hello world')
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
>>> x = list()
#创建空列表
列表与列表推导式9
列表创建与删除
l 创建列表之后,可以使用整数作为下标来访问其中的
元素,其中0表示第1个元素,1表示第2个元素,2表
示第3个元素,以此类推;列表还支持使用负整数作
为下标,其中-1表示最后1个元素,-2表示倒数第2个
元素,-3表示倒数第3个元素,以此类推
>>> x = list(range(10)) #创建列表
>>> import random
>>> random.shuffle(x) #把列表中的元素打乱顺序
>>> x
[6, 8, 7, 1, 0, 9, 2, 4, 3, 5]
>>> x[1]
#访问第2个元素
8
>>> x[-1]
#访问最后1个元素
5
>>> x[-2]
3
列表与列表推导式1
0
10
列表创建与删除
l 当不再使用时,使用del命令删除整个列表,如果列
表对象所指向的值不再有其他对象指向,Python将同
时删除该值
l 拓展知识:垃圾回收机制。一般来说,使用del删除
对象之后Python会在恰当的时机调用垃圾回收机制来
释放内存,我们也可以在必要的时候导入Python标准
库gc之后调用gc.collect()函数立刻启动垃圾回收机制
来释放内存
>>> del a_list
>>> a_list
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
a_list
NameError: name 'a_list' is not defined
列表与列表推导式1
1
11
增加列表元素-1
l 可以使用"+"运算符将元素添加到列表中,不属于原
地操作,而是返回新列表,该操作速度较慢
>>> aList = [3,4,5]
>>> aList = aList + [7]
>>> aList
[3, 4, 5, 7]
l 列表对象的append()方法在当前列表尾部追加元素,
原地修改列表(
"原地"是指不改变列表在内存中的首
地址),速度较快
>>> aList.append(9)
>>> aList
[3, 4, 5, 7, 9]
列表与列表推导式1
12
2
增加列表元素-2
l 对于列表而言,运算符+=和append()有共同点,但又
不完全一样。
l +=属于原地操作
>>> x = []
>>> x += '1234'
>>> x
['1', '2', '3', '4']
>>> x += range(3)
>>> x
['1', '2', '3', '4', 0, 1, 2]
>>> x += map(str, range(3))
>>> x
['1', '2', '3', '4', 0, 1, 2, '0', '1', '2']
>>> x = []
>>> x.append('1234') #注意与+=的区别
>>> x
['1234']
列表与列表推导式1
3
13
增加列表元素的分析
l 列表中包含的是元素值的引用,不是直接包含元素值
l 如果是直接修改序列变量的值,则与Python普通变量的情况
是一样的
l 如果是通过下标来修改序列中元素的值或通过可变序列对象
自身提供的方法来增加和删除元素时,序列对象在内存中的
起始地址是不变的,仅仅是被改变值的元素地址发生变化,
也就是所谓的"原地操作"
>>> a = [1,2,4]
>>> b = [1,2,3]
>>> a == b
False
>>> id(a) == id(b)
False
>>> id(a[0]) == id(b[0])
True
>>> a = [1,2,3]
>>> id(a)
25289752
列表与列表推导式
>>> a.append(4)
>>> id(a)
25289752
>>> a.remove(3)
>>> a
[1, 2, 4]
>>> id(a)
25289752
>>> a[0] = 5
>>> a
[5, 2, 4]
>>> id(a)
252897521
4
14
增加列表元素-3
l 列表对象的extend()方法可以将另一个迭代对象的所
有元素添加至该列表对象尾部,原地操作
>>> a.extend([7,8,9])
>>> a
[5, 2, 4, 7, 8, 9]
>>> id(a)
25289752
l 列表对象的insert()方法将元素添加至列表的指定位置,
原地操作
>>> a.insert(3, 6)
#在下标为3的位置插入元素6
>>> a
[5,2,4,6,7,8,9]
l 应尽量从列表尾部进行元素的增加与删除操作
l insert()方法会引起插入位置之后所有元素的移动,
这会影响处理速度
l 类似的还有remove()方法、pop()函数弹出列表非尾
列表与列表部推元导素式和使用del命令删除列表非尾部元素的情况