序列是一块用来存放多个值的内存空间,Python中常用的序列结构有列表、元组、字典、字符串、集合等。在前一期中集中介绍了列表的相关操作,本期继续介绍元组、字典、集合等常见序列。
元组
元组可以看作轻量级列表,属于不可变序列,元组一旦创建,用任何方法都不可以修改其元素。元组定义时所有元素是放在一对圆括号“( )” 内的。
元组的创建和删除
1. 直接创建元组
>>> tuple1 = (1,2,3,4)
>>> tuple2 = (1,) #只包含一个元素的元组最后必须写个逗号
>>> tuple3 = 1,2,3 #也可以省略括号
>>> tuple4 = () #创建空元组
2. 通过tuple()函数创建元组
使用tuple()函数将列表、字符串、字典、map对象等其他可迭代对象类型的数据转换为元组。
>>> tuple5 = tuple([1,2,3,4])
>>> tuple5
(1, 2, 3, 4)
>>> tuple6 = tuple("Python")
>>> tuple6
('P', 'y', 't', 'h', 'o', 'n')
>>> tuple7 = tuple({1:'a',2:'b',3:'c'})
>>> tuple7
(1, 2, 3)
>>> tuple8 = tuple(map(str,[1,2,3]))
>>> tuple8
('1', '2', '3')
3. 删除元组
对于元组而言,只能使用del命令删除整个元组对象,不能只删除元组中的部分元素。
>>> del tuple1
元组与列表的区别
元组一旦定义就不允许更改,在元组中不能添加或删除元素,也就没有append()、extend()、remove()、pop()等方法。
元组的速度比列表略快,占用空间略少。如果定义了一系列常量值,而所需做的仅是对它进行遍历,那么一般使用元组而不用列表。
元组可用作字典的“键”,也可以作为集合的元素。列表、字典、集合或其他类型可变对象的元组也不能做字典的“键”。
如果元组中包含列表或其他类型的可变对象,这些对象是可变的,但元组元素的引用仍是不可变的。
>>> tuple9 = ([1,2],3,4)
>>> tuple9[0][0] = 0
>>> tuple9[0].append('x')
>>> tuple9
([0, 2, 'x'], 3, 4)
>>> tuple9[0]=tuple9[0]+['y']
TypeError: 'tuple' object does not support item assignment
>>> tuple9
([0, 2, 'x'], 3, 4)
>>> tuple9[0]+=['y']
TypeError: 'tuple' object does not support item assignment
>>> tuple9
([0, 2, 'x', 'y'], 3, 4)
序列解包
序列解包是Python特有的语法,它将可迭代对象解开,将得到的值存储到一系列变量中。
1. 对多个变量同时赋值
>>> a,b,c = 1,2,3
>>> a,b,c
(1, 2, 3)
2. 遍历多个序列
>>> keys = ['a', 'b', 'c', 'd']
>>> values = [1, 2, 3, 4]
>>> for k,v in zip(keys,values):
print(k,v)
a 1
b 2
c 3
d 4
3. 使用*号进行序列解包
把一个星号(*)加在列表或者元组前面,就是完全解包,会将序列拆散成一个一个的元素。
使用两个星号(**)将字典解包为关键字参数。
>>> (*[1,2],3,4,*(5,6))
(1, 2, 3, 4, 5, 6)
>>> {1:'a',**{2:'b',3:'c'}}
{1: 'a', 2: 'b', 3: 'c'}
生成器表达式
生成器推导式用法与列表推导式非常相似,在形式上使用圆括号作为定界符,生成器推导式的结果是一个生成器对象。生成器对象类似于迭代器对象,具有惰性求值的特点。不支持使用下标访问其中的元素。
对于生成器对象,可以根据需要将其转化为列表或元组,可以使用__next__()方法或内置函数next()获取下一个元素,使用for循环遍历其中的元素。
#创建生成器对象g使其具有元素1,4,9,16,25,用__next__方法遍历
>>> g = ((i**2) for i in range(1,6))
>>> g.__next__()
1
>>> g.__next__()
4
不管用哪种方法访问生成器对象,只能从前往后正向访问每个元素,已访问过的元素不能再次访问,当所有元素访问结束以后,如果需要重新访问其中的元素,必须重新创建该生成器对象
字典
字典是无序、可变序列。定义字典时,每个元素的键和值用冒号分隔,元素之间用逗号分隔,所有的元素放在一对大括号“{ }”中。字典中的键可以为任意不可变数据,比如整数、实数、复数、字符串、元组等等。
字典的创建和删除
1. 直接创建字典
>>> dict1 = {1:'a',2:'b',3:'c'}
>>> dict3 = {} #空字典
2. 通过dict()函数创建字典
>>> dict2 = dict(zip([1,2,3,4],['a','b','c','d']))
>>> dict2
{1: 'a', 2: 'b', 3: 'c', 4: 'd'}
>>> dict3 = dict() #空字典
>>> dict3
{}
>>> dict4 = dict(A = 'apple',B = 'boy',C = 'China')
>>> dict4
{'A': 'apple', 'B': 'boy', 'C': 'China'}
3. 通过字典类dict的fromkeys()方法创建字典
>>> dict5 = dict.fromkeys(['A', 'B', 'C'])
>>> dict5
{'A': None, 'B': None, 'C': None}
>>> dict6 = dict.fromkeys((1,2,3),["six"])
>>> dict6
{1: ['six'], 2: ['six'], 3: ['six']}
#所有元素值的引用都是一样,不同元素的值有可能会互相影响
4. 删除字典
可以使用del命令删除整个字典。
del dict1
字典元素的读取
1. 通过键访问值
dict2 = {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
#以键为下标访问某个元素值
>>> dict2[1]
'a'
#使用字典对象的get()方法访问某个元素值
>>> dict2.get(2)
'b'
2. 访问所有的键和值
dict4 = dict(A = 'apple',B = 'boy',C = 'China')
#通过keys()方法访问所有键
>>> dict4.keys()
dict_keys(['A', 'B', 'C'])
#通过values()方法访问所有值
>>> dict4.values()
dict_values(['apple', 'boy', 'China'])
3. 输出所有元素
#通过items()方法输出字典中所有元素
>>> for item in dict4.items():
print(item)
('A', 'apple')
('B', 'boy')
('C', 'China')
字典元素的添加、修改和删除
1. 元素的添加和修改
① 以指定键为下标为字典赋值:若键存在则修改该键的值,若不存在则添加一个键值对。
② 使用字典对象的方法
方法 | 说明 |
---|---|
update(dict) | 将另一个字典的键值对添加到当前字典对象 |
2. 元素的删除
① 使用del删除字典中指定键的元素
② 使用字典对象的方法
方法 | 说明 |
---|---|
clear() | 删除字典中所有元素 |
pop(key) | 删除并返回键为key的值 |
popitem() | 删除并返回字典中的一个元素 |
字典推导式
通过循环和条件判断表达式配合使用,返回值是一个字典,整个表达式需要写在{}内部。
#创建字典使其键值分别为1-5之间的数字和字符
>>> {i:str(i) for i in range(1,6)}
{1: '1', 2: '2', 3: '3', 4: '4', 5: '5'}
集合
集合是无序、可变序列,使用一对大括号“{ }”界定,元素不可重复,同一个集合中每个元素都是唯一的。集合中只能包含数字、字符串、元组等不可变类型(或者说可哈希)的数据,不能包含列表、字典、集合等可变类型的数据。
集合的创建和删除
1. 直接创建集合
>>> set1 = {1,2,3}
2. 通过set()函数创建集合
>>> set2 = set(range(10))
>>> set2
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> set3 = set([1,2,3,4,2,2,3,4,5,6,7])
>>> set3
{1, 2, 3, 4, 5, 6, 7} #自动去除重复
>>> set4 = set()
>>> set4
set() #空集合
3. 删除集合
可以使用del命令删除整个集合。
del set1
集合元素的添加和删除
1. 元素的添加
方法 | 说明 |
---|---|
add() | 将另一个字典的键值对添加到当前字典对象 |
2. 元素的删除
方法 | 说明 |
---|---|
clear() | 删除集合中所有元素 |
pop() | 删除集合排序后第一个元素 |
remove(x) | 直接删除指定元素x |
集合的运算
1. 交集、并集、差集、对称差集等运算
>>> set_a = {0,1,2,3,7,8}
>>> set_b = {8,9,10,11,12,13}
>>> set_a & set_b #交集
{8}
>>> set_a | set_b #并集
{0, 1, 2, 3, 7, 8, 9, 10, 11, 12, 13}
>>> set_a - set_b #差集
{0, 1, 2, 3, 7}
>>> set_a ^ set_b #对称差集
{0, 1, 2, 3, 7, 9, 10, 11, 12, 13}
2. 集合包含关系测试
>>> set_x = {1,2,3}
>>> set_y = {1,2,4}
>>> set_z = {1,2,3,5}
>>> set_x < set_y
False
>>> set_x < set_z
True