Python序列:元组、字典、集合

序列是一块用来存放多个值的内存空间,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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

STRANGEX-03

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值