Python序列的应用(八):元组、字典
前言:在Python编程语言中,序列是一种非常重要的数据结构,它允许我们存储和操作有序的数据集合。在前几期的内容中,我们已经探讨了列表(List)和集合(Set)这两种序列的应用,它们各自具有独特的特性和用途。列表以其灵活性和可变性而闻名,而集合则以其无序性和唯一性而受到青睐。今天,我们将深入探讨Python中的另外两种序列类型:元组(Tuple)和字典(Dictionary)。
元组和字典都是Python中不可或缺的数据结构,它们在不同的场景下有着广泛的应用。元组以其不可变性和高效性而受到青睐,尤其适合用于保护数据不被修改的情况。字典则以其键值对的结构和快速查找能力而闻名,是存储和管理关联数据的理想选择。
在这篇文章中,我们将详细介绍元组和字典的创建、操作和应用,包括:
- 元组的创建和删除:如何创建元组,以及如何删除整个元组或其元素。
- 访问元组元素:如何通过索引访问元组中的元素。
- 修改元组元素:为什么元组是不可变的,以及如何处理需要修改元组的场景。
- 元组推导式:如何使用元组推导式来创建元组。
- 字典的创建和删除:如何创建字典,以及如何删除整个字典或其元素。
- 通过键值对访问字典:如何通过键来访问字典中的值。
- 遍历字典:如何遍历字典的键、值或键值对。
- 添加、修改和删除字典元素:如何对字典进行增删改操作。
- 字典推导式:如何使用字典推导式来创建字典。
通过这篇文章,你将能够更深入地理解元组和字典的工作原理,以及如何在实际编程中有效地使用它们。无论是处理固定不变的数据集,还是管理复杂的关联数据,元组和字典都能提供强大的支持。让我们开始今天的探索之旅吧!
一、元组
Python 中的元组(Tuple)是一种数据结构,用于存储不同的值(可以是数字、字符串、对象等)。元组与列表(List)类似,但元组是不可变的,这意味着一旦元组被创建,你就不能添加、删除或改变它的元素。元组的这种不可变性使得它们在某些情况下比列表更安全,因为它们不能被意外地修改。
以下是关于Python元组的一些基本特性和操作:
1、创建元组:
元组可以通过将一系列值用逗号分隔来创建,或者使用圆括号来明确表示这是一个元组。
# 使用逗号分隔
my_tuple = 1, 2, 3
print(my_tuple) # 输出:(1, 2, 3)
# 使用圆括号
my_tuple = (1, 2, 3)
print(my_tuple) # 输出:(1, 2, 3)
2、元组的删除
由于元组是不可变的,你不能删除元组中的单个元素,但可以删除整个元组或者清空整个元组。
my_tuple = (1, 2, 3)
del my_tuple # 删除整个元组
# my_tuple[0] = 4 # 尝试修改元素会抛出TypeError
# 清空元组
my_tuple = ()
print(my_tuple) # 输出:()
3、 访问元组元素:
可以通过索引来访问元组中的元素,索引从0开始。
my_tuple = (1, 2, 3)
print(my_tuple[0]) # 输出:1
4、元组的不可变性:
由于元组是不可变的,你不能修改元组中的元素。尝试修改将会导致错误。
my_tuple = (1, 2, 3)
# my_tuple[0] = 4 # 这会抛出TypeError
5、元组的切片:
可以对元组进行切片操作,但结果仍然是一个新的元组。
my_tuple = (1, 2, 3, 4, 5)
print(my_tuple[1:3]) # 输出:(2, 3)
6、元组的连接:
可以使用加号(+)来连接两个元组,但结果是一个新的元组。
tuple1 = (1, 2)
tuple2 = (3, 4)
print(tuple1 + tuple2) # 输出:(1, 2, 3, 4)
7、元组的解包:
可以同时赋值多个变量,这称为元组的解包。
my_tuple = (1, 2, 3)
a, b, c = my_tuple
print(a, b, c) # 输出:1 2 3
8、元组的方法:
元组有一些内置的方法,如 count()
和 index()
。
在Python中,count()
和 index()
是列表(List)和元组(Tuple)等序列类型提供的内置方法,它们用于执行特定的操作:
① count() 方法:
count()
方法用于统计某个元素在序列中出现的次数,并返回这个计数。- 它接受一个参数,即你想要计数的元素。
- 如果元素在序列中不存在,则返回0。
- 示例:
my_list = [1, 2, 2, 3, 2, 4] count_of_two = my_list.count(2) # 返回元素2出现的次数 print(count_of_two) # 输出:3
② index() 方法:
index()
方法用于从序列中找出某个元素第一次出现的索引位置,并返回这个索引。- 它接受一个参数,即你想要查找索引的元素。
- 如果元素在序列中不存在,则抛出一个
ValueError
异常。 - 可以有可选的参数,用于指定搜索的起始和结束位置。
- 示例:
如果列表中有多个相同的元素,my_list = [1, 2, 3, 2, 4] index_of_two = my_list.index(2) # 返回元素2第一次出现的索引 print(index_of_two) # 输出:1
index()
只会返回第一个元素的索引。
这两个方法在处理列表和元组时非常有用,尤其是在需要对元素进行计数或者查找元素位置时。
9、元组与列表的转换:
元组可以被转换成列表,反之亦然,因为列表是可变的。
my_tuple = (1, 2, 3)
my_list = list(my_tuple) # 将元组转换为列表
print(my_list) # 输出:[1, 2, 3]
my_list = [1, 2, 3]
my_tuple = tuple(my_list) # 将列表转换为元组
print(my_tuple) # 输出:(1, 2, 3)
10、元组推导式
元组推导式类似于列表推导式,但是使用圆括号而不是方括号。
my_tuple = tuple(i * 2 for i in range(5))
print(my_tuple) # 输出:(0, 2, 4, 6, 8)
### 11、元组和列表的区别
1. **可变性**:
- 列表是可变的,可以添加、删除或更改元素。
- 元组是不可变的,一旦创建就不能更改。
2. **性能**:
- 由于元组的不可变性,它们通常比列表有更小的内存开销,并且在某些情况下执行速度更快。
3. **用途**:
- 列表通常用于存储需要动态改变大小的数据集合。
- 元组通常用于保护数据不被改变,并且可以作为字典的键,而列表则不能。
4. **方法**:
- 列表有更多的方法,比如 `append()`, `extend()`, `remove()`, `pop()` 等,因为它们需要支持元素的添加和删除。
- 元组的方法较少,主要是 `count()` 和 `index()`。
5. **语法**:
- 创建列表时使用方括号 `[]`。
- 创建元组时使用圆括号 `()`,或者逗号分隔。
元组在Python中非常有用,特别是在需要确保数据不被改变的情况下,比如作为字典的键或者函数的返回值。
### 实例训练20 -使用元组保存咖啡馆里提供的咖啡名称
coffeename = ('蓝山','卡布奇诺','摩卡','曼特宁','麝香猫','哥伦比亚') #定义元组
print(coffeename) #输出元组
![](https://img2024.cnblogs.com/blog/3426651/202412/3426651-20241214100727709-642900042.png)
### 实例训练21 -使用for循环列出咖啡馆里提供的咖啡名称
coffeename = ('蓝山','卡布奇诺','摩卡','曼特宁','麝香猫','哥伦比亚') #定义元组
print("您好,欢迎光临 ~ 伊米咖啡馆 ~\n\n我店有: \n")
for name in coffeename: #遍历元组
print(name + "咖啡",end= " ")
![](https://img2024.cnblogs.com/blog/3426651/202412/3426651-20241214102535595-1822594802.png)
### 实例训练22 -分两列显示某赛季NBA西部联盟前八名球队
print("某赛季NBA西部联盟前八名\n")
team = ("火箭","勇士","开拓者","雷霆","爵士","鹈鹕","马刺","森林狼")
for index,item in enumerate(team):
if index%2 == 0: #判断是否为偶数,为偶数时不换行
print(item +"\t\t",end='')
else:
print(item + "\n") #换行输出
![](https://img2024.cnblogs.com/blog/3426651/202412/3426651-20241214110120012-846870189.png)
### 实例训练23 -将麝香猫咖啡替换为拿铁咖啡
coffeename = ('蓝山','卡布奇诺','摩卡','曼特宁','麝香猫','哥伦比亚') #定义元组
coffeename[4] = '拿铁' #将"麝香猫",替换为"拿铁"
print(coffeename)
![](https://img2024.cnblogs.com/blog/3426651/202412/3426651-20241214110602778-1644122603.png)
### 注意:通过这个实验就可以看出元组是无法直接修改的,需要修改得重新赋值,如:
coffeename = ('蓝山','卡布奇诺','摩卡','曼特宁','麝香猫','哥伦比亚') #定义元组
coffeename = ('蓝山','卡布奇诺','摩卡','曼特宁','拿铁','哥伦比亚') #定义元组
print(coffeename)
### 二、字典
Python中的字典(Dictionary)是一种内置的数据结构,它存储键值对(key-value pairs)。字典中的每个键都与一个值相关联,且键必须是唯一的。以下是关于Python字典的一些基本操作:
### 1、字典的创建和删除
### ① 创建字典:
- 字典可以通过花括号 `{}` 或者 `dict()` 函数来创建。
- 键值对用冒号 `:` 分隔,键值对之间用逗号分隔。
```python
# 使用花括号创建
my_dict = {'name': 'Alice', 'age': 25}
# 使用dict()函数创建
my_dict = dict(name='Alice', age=25)
# 空字典
empty_dict = {}
② 删除字典:
- 可以使用
del
语句或者clear()
方法来删除整个字典。 - 也可以使用
pop()
或popitem()
方法来删除字典中的单个元素。
# 删除整个字典
del my_dict
# 清空字典
my_dict = {'a': 1, 'b': 2}
my_dict.clear() # 清空字典后,my_dict 变为 {}
# 删除单个键值对
my_dict = {'a': 1, 'b': 2}
my_dict.pop('a') # 删除键 'a' 及其对应的值,返回值 1
my_dict.popitem() # 删除并返回一个键值对,字典变为 {}
实例训练24 -创建一个保存女神星座的字典
name = ['绮梦','冷伊一','香凝','黛兰'] #作为键的列表
sign = ['水瓶座','射手座','双鱼座','双子座'] #作为值的列表
dictionary = dict(zip(name,sign)) #转换为字典
print(dictionary) #输出转换后字典
2、通过键值对访问字典
可以通过键来访问字典中的值。
my_dict = {'name': 'Alice', 'age': 25}
print(my_dict['name']) # 输出:Alice
如果尝试访问不存在的键,会抛出 KeyError
。为了避免这个错误,可以使用 get()
方法,它允许你设置一个默认值。
print(my_dict.get('name', 'Default Name')) # 输出:Alice
print(my_dict.get('gender', 'Default Gender')) # 输出:Default Gender
3、遍历字典
可以遍历字典的键、值或键值对。
my_dict = {'name': 'Alice', 'age': 25}
# 遍历键
for key in my_dict:
print(key)
# 遍历值
for value in my_dict.values():
print(value)
# 遍历键值对
for key, value in my_dict.items():
print(key, value)
4、添加、修改和删除字典元素
① 添加元素:
- 直接赋值即可添加新的键值对。
dictionary = dict((('绮梦','水瓶座'),('冷伊一','射手座'),('香凝','双鱼座'),('黛兰','双子座')))
dictionary["碧绮"] = "巨蟹座" #添加一个元素
print(dictionary)
② 修改元素:
- 如果键已存在,赋值会更新其对应的值。
dictionary = dict((('绮梦','水瓶座'),('冷伊一','射手座'),('香凝','双鱼座'),('黛兰','双子座')))
dictionary["香凝"] = "天蝎座" #添加一个元素,当元素存在时,则相当于修改功能
print(dictionary)
③ 删除元素:
- 使用
del
语句、pop()
或popitem()
方法删除元素。
dictionary = dict((('绮梦','水瓶座'),('冷伊一','射手座'),('香凝','双鱼座'),('黛兰','双子座')))
del dictionary["香凝"] #删除一个元素
print(dictionary)
当删除一个不存在的键时,会报错异常:
dictionary = dict((('绮梦','水瓶座'),('冷伊一','射手座'),('香凝','双鱼座'),('黛兰','双子座')))
del dictionary["香凝2"] #删除一个元素
print(dictionary)
避免这个异常,可以做一下修改:
dictionary = dict((('绮梦','水瓶座'),('冷伊一','射手座'),('香凝','双鱼座'),('黛兰','双子座')))
if "香凝2" in dictionary: #如果存在
del dictionary["香凝2"] #删除一个元素
print(dictionary)
5、字典推导式
字典推导式提供了一种优雅的方式来创建字典。
# 创建一个平方数字典
squares = {x: x**2 for x in range(6)}
print(squares) # 输出:{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
字典推导式可以包含条件语句:
# 创建一个只包含偶数的平方数字典
even_squares = {x: x**2 for x in range(6) if x % 2 == 0}
print(even_squares) # 输出:{0: 0, 2: 4, 4: 16}
实例训练25 -应用字典推导式实现根据名字和星座创建一个字典
name = ['绮梦','冷伊一','香凝','黛兰'] #作为键的列表
sign = ['水瓶','射手','双鱼','双子'] #作为值的列表
dictionary = {i:j+'座' for i,j in zip(name,sign)} #使用列表推导式生成字典
print(dictionary) #输出转换后字典
以上就是Python字典的基本操作,包括创建、删除、访问、遍历、修改以及使用字典推导式。字典是Python中非常强大和灵活的数据结构,适用于各种场景。