Python程序设计基础与应用 第三章-Python序列结构

第三章 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 序列解包

对多个变量同时进行赋值的简洁形式
把一个序列或可迭代对象中的多个元素的值同时赋给多个变量
要求等号左侧变量的数量和等号右侧值的数量必须一致

你可能感兴趣的:(Python,python)