第三章 Python序列结构
3.1 Python序列概述
有序序列:
列表、元组、字符串
无序序列:
字典、集合
可变序列:
列表、字典、集合
不可变序列:
元组、字符串
3.2 列表
包含若干元素的有序连续内存空间
同一个列表元素的数据类型可以各不相同。
可以同时包含整数、实数、字符串等基本类型元素
可以包含列表、元组、字典、集合、函数以及其他任意对象
空对象:只有一对方括号而没有任何元素
3.2.1 列表创建与删除
#创建空列表
a_list = []
a_list = list()
#创建列表
a_list = [3, 5, 7, 9, 11]
#转换为列表
tup_list = list((3, 5, 7, 9, 11))
ran_list = list(range[1, 10, 2])
str_list = list('hello world')
set_list = list({3, 7, 5})
dic_list = list({'a':3, 'b':9, 'c':78})
dic_items_list = list({'a':3, 'b':9, 'c':78}.items())
#删除列表
del a
3.2.2 列表元素访问
使用整数作为下标访问任意位置上的元素 eg:0,表示列表第一个元素
还支持使用负整数作为下标 eg:-1,表示列表倒数第一个元素
3.2.3 列表常用方法
1.append()、insert()、extend()
append()用于向列表尾部追加一个元素
insert()用于向列表任意指定位置插入一个元素
extend()用于将另一个列表中的所有元素追加值当前列表的尾部
2.pop()、remove()
pop()用于删除并返回指定位置(默认最后一个)上的元素;指定位置不是合法索引抛出异常
remove()用于删除列表中第一个与指定值相等的元素;列表中不存在该元素抛出异常
del命令删除指定位置上的元素
3.count()、index()
count()用于列表中返回指定元素出现的次数
index()用于返回指定元素在列表中首次出现的位置;该元素不在列表中则抛出异常
4.sort()reverse()
sort()用于按照指定的规则对列表中的所有元素进行原地排序
reverse()用于将列表的所有元素原地翻转
3.2.4 列表对象支持的运算符
+连接两个列表,得到一个新列表
*用于列表和整数相乘,表示序列重复,返回新列表
in用于测试列表中是否包含某元素
关系运算符用来比较两个列表的大小
3.2.5 内置函数对列表的操作
#生成列表
x = list(range(11))
import random
#打乱列表元素顺序
random.shuffle(x)
#测试是否所有元素都等价与True
all(x) #特殊情况:all([])---->True
#测试是否存在等价于True的元素
any(x) #特殊情况:any([])----->False
#返回最大值
max(x)
#返回最小值
min(x)
#所有元素之和
sum(x)
#列表元素个数
len(x)
3.2.6 列表推导式
[表达式 for 变量 in 旧列表]
[表达式 for 变量 in 旧列表 if 条件]
3.2.7 切片
#切片适用于元组、字符串、range对象
[start:end:step]
start:表示切片开始位置,默认为0;start为0时可省略
end:表示切片截至位置(左闭右开),默认为列表长度;end为列表长度时可省略
step:表示切片的步长,默认为1;step为1时可省略,省略步长时还可以省略最后一个冒号
1.使用切片获取列表部分元素
2.使用切片为列表增加元素
3.使用切片替换和修改列表元素
4.使用切片删除列表元素
5.结合使用del命令与切片删除列表中的部分元素
3.3 元组与生成器表达式
3.3.1 元组创建与元素访问
#建立空元组
x = ()
x = tuple()
#建立元组
x = (1, 2, 3)
3.3.2 元组与列表的异同点
相同点:
都属于有序列表
都支持使用双向索引访问其中的元素
都可使用count()方法统计指定元素出现的次数
使用index()方法获取指定元素的索引不同点:
元组属于不可变序列
不可以直接修改元组中元素的值
无法为元组增加或删除元素
元组支持切片操作,但是只能通过切片来访问元组中的元素
3.3.3 生成器表达式
只在需要时生成新元素
使用时,可以根据需要转化为列表或元组
可以使用生成器对象的__next()__方法或内置函数next()进行遍历
直接使用for进行遍历
只能从前往后正向访问每个元素
不可以再次访问已访问过的对象
不支持使用下标访问其中的元素
enumerate、filter、map、zip等其他迭代器也具有不可以再次访问已访问过的对象的特点
3.4 字典
包含若干“键:值”元素的无序可变序列
表示一种映射或对应关系,也称关联数组
键可以是Python中任意不可变数据
但不能使用列表、字典、集合或其他可变类型作为字典的键
键不可以重复,值可以重复
3.4.1 字典的创建与删除
x = dict()
x = {}
Dict = {'a':1, 'b':2}
keys = ['a', 'b', 'c', 'd']
values = [1, 2, 3, 4]
d = dict(zip(keys, values))
d = dict(name='Dong', age=30)
aDict = dict.fromkeys(['name', 'age', 'sex']) #创建‘值’为空的字典
del aDict #删除字典aDict
3.4.2 字典元素的访问
aDict = {'a':1, 'b':2}
aDict['a'] #指定的键存在,返回对应值
aDict['c'] #指定的键不存在,抛出异常
aDict.get('a') #指定的键存在,返回对应值
aDict.get('c','Not exists.') #指定的键不存在,返回指定默认值'Not exists.'
# 遍历
for item in aDict: #默认遍历字典的键
print(item)
for item in aDict.items(): #遍历字典的元素
print(item)
for item in aDict.keys(): #遍历字典的值
print(item)
aDict.items() #查看字典中所有元素
aDict.keys() #查看字典中所有键
aDict.values() #查看字典中所有值
3.4.3 元素的添加、修改与删除
当以指定键作为下标为字典元素赋值时
该键存在,则表示修改该键对应的值
该键不存在,则表示添加一个新的“键:值”对,也就是添加一个新元素
使用字典对象的update()方法可以将另一个字典的“键:值”一次性全部添加到当前的字典对象,如果两个字典中存在相同的“键”,则以另一个字典中的“值”为准,对当前字典进行更新
使用字典对象的pop()和popitem()方法弹出并删除指定的元素
aDict = {'a':1, 'b':2}
aDict.popitem() #('a',1)弹出一个元素,对空字典抛出异常
aDict.pop('b') #1 弹出指定键对应的元素
3.5 集合
无序可变序列
同一个集合内每个元素唯一,不允许重复
集合中只能包含数字、字符串、元组等不可变类型的数据
不能包含列表、字典、集合等可变类型数据
3.5.1 集合对象的创建与删除
a = {3, 5}
a_set = set(range(8, 14))
b_set = set([1,2,2,3]) #自动去掉重复元素
x = set()
3.5.2 集合操作与运算
(1)集合元素增加与删除
add()方法可增加新元素,若该元素已存在则忽略该操作,不会抛出异常
update()方法用于合并另一个集合中的元素到当前集合,并自动去除重复元素
pop()方法用于随机删除并返回集合中的元素,指定元素不存在则抛出异常
discard()方法用于从集合中删除一个指定元素,元素不存在则忽略该操作
(2)集合运算
内置函数len()、max()、min()、sum()、sorted()、map()、filter()、enumerate()
支持数学意义上的交集、并集、差集等运算
关系运算符>、>=、<、>=作用于集合时表示集合之间的包含关系
a_set = set([8,9,10,11,12,13,14])
b_set = {0,1,2,3,7,8}
a_set | b_set #并集
a_set & b_set #交集
a_set - b_set #差集
a_set ^ b_set #对称差集
3.6 序列解包
对多个变量同时进行赋值的简洁形式
把一个序列或可迭代对象中的多个元素的值同时赋给多个变量
要求等号左侧变量的数量和等号右侧值的数量必须一致