【Python】元组、字典与集合详解:数据容器的实战应用

目录

[🍔 元组的定义与使用](#🍔 元组的定义与使用)

[1.1 为什么需要元组](#1.1 为什么需要元组)

[1.2 元组的定义](#1.2 元组的定义)

[1.3 元组的应用场景(这个技术在未来工作中的应用场景)](#1.3 元组的应用场景(这个技术在未来工作中的应用场景))

[1.4 元组的相关操作方法](#1.4 元组的相关操作方法)

[🍔 字典:Python中的查询神器](#🍔 字典:Python中的查询神器)

[2.1 为什么需要字典(dict)](#2.1 为什么需要字典(dict))

[2.2 Python中字典(dict)的概念](#2.2 Python中字典(dict)的概念)

[2.3 字典的增操作](#2.3 字典的增操作)

[2.4 字典的删操作](#2.4 字典的删操作)

[2.5 字典的改操作](#2.5 字典的改操作)

[2.6 字典的查操作](#2.6 字典的查操作)

[2.7 综合案例:通讯录管理系统](#2.7 综合案例:通讯录管理系统)

[🍔 集合:求交集、并集、差集](#🍔 集合:求交集、并集、差集)

[3.1 什么是集合](#3.1 什么是集合)

[3.2 集合的定义](#3.2 集合的定义)

[3.3 集合操作的相关方法(增删查)](#3.3 集合操作的相关方法(增删查))

[3.3.1 集合的增操作](#3.3.1 集合的增操作)

[3.3.2 集合的删操作](#3.3.2 集合的删操作)

[3.3.3 集合中的查操作](#3.3.3 集合中的查操作)

[3.4 集合中的交集、并集与差集特性](#3.4 集合中的交集、并集与差集特性)

🍔 元组的定义与使用

1.1 为什么需要元组

思考:如果想要存储多个数据,但是这些数据是不能修改的数据,怎么做?

答:列表?列表可以一次性存储多个数据,但是列表中的数据允许更改。

复制代码
num_list = [10, 20, 30]
num_list[0] = 100

那这种情况下,我们想要存储多个数据且数据不允许更改,应该怎么办呢?

答:使用==元组,元组可以存储多个数据且元组内的数据是不能修改的。==

1.2 元组的定义

元组特点:定义元组使用==小括号==,且使用==逗号==隔开各个数据,==数据可以是不同的数据类型。==

基本语法:

复制代码
# 多个数据元组
tuple1 = (10, 20, 30)
​
# 单个数据元组
tuple2 = (10,)

注意:如果定义的元组只有一个数据,那么这个数据后面也要添加逗号,否则数据类型为唯一的这个数据的数据类型。

1.3 元组的应用场景(这个技术在未来工作中的应用场景)

  • 函数的参数和返回值,一个函数可以接受任意多个参数,或者依次返回多个数据(暂时了解)

  • 格式化字符串,百分号和format,格式化字符串后面的()本质上就是一个元组

    print('姓名:%s,年龄:%d,家庭住址:%s' % (name, age, address))

  • 让列表不可以修改,以保护数据安全

1.4 元组的相关操作方法

由于元组中的数据不允许直接修改,所以其操作方法大部分为查询方法。

编号 函数 作用
1 元组[索引] 根据==索引下标==查找元素
2 index() 查找某个数据,如果数据存在返回对应的下标,否则报错,语法和列表、字符串的index方法相同
3 count() 统计某个数据在当前元组出现的次数
4 len() 统计元组中数据的个数

案例1:访问元组中的某个元素

复制代码
nums = (10, 20, 30)
print(nums[2])

案例2:查找某个元素在元组中出现的位置,存在则返回索引下标,不存在则直接报错

复制代码
nums = (10, 20, 30)
print(nums.index(20))

案例3:统计某个元素在元组中出现的次数

复制代码
nums = (10, 20, 30, 50, 30)
print(nums.count(30))

案例4:len()方法主要就是求数据序列的长度,字符串、列表、元组

复制代码
nums = (10, 20, 30, 50, 30)
print(len(nums))

🍔 字典:Python中的查询神器

2.1 为什么需要字典(dict)

思考1:比如我们要存储一个人的信息,姓名:Tom,年龄:20周岁,性别:男,家庭住址:北京市昌平区,如何快速存储。

复制代码
person = ['Tom', 20, '男', '北京市昌平区']

思考2:在日常生活中,姓名、年龄以及性别同属于一个人的基本特征。但是如果使用列表对其进行存储,则分散为3个元素,这显然不合逻辑。我们有没有办法,将其保存在同一个元素中,姓名、年龄以及性别都作为这个元素的3个属性。

答:使用Python中的字典

2.2 Python中字典(dict)的概念

特点:

① 符号为==大括号==(花括号) => {}

② 数据为==键值对==形式出现 => {key:value},key:键名,value:值,在同一个字典中,key必须是唯一(类似于索引下标)

③ 各个键值对之间用==逗号==隔开

在字典中,键名除了可以使用字符串的形式,还可以使用数值的形式来进行表示

定义:

复制代码
# 有数据字典
dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'}
​
# 空字典
dict2 = {}
​
dict3 = dict()

在Python代码中,字典中的key必须使用引号引起来

2.3 字典的增操作

基本语法:

复制代码
字典名称[key] = value
注:如果key存在则修改这个key对应的值;如果key不存在则新增此键值对。

案例:定义一个空字典,然后添加name、age以及address这样的3个key

复制代码
# 1、定义一个空字典
person = {}
# 2、向字典中添加数据
person['name'] = '刘备'
person['age'] = 40
person['address'] = '蜀中'
# 3、使用print方法打印person字典
print(person)

注意:列表、字典为可变类型

2.4 字典的删操作

① del 字典名称[key]:删除指定元素

复制代码
# 1、定义一个有数据的字典
person = {'name':'王大锤', 'age':28, 'gender':'male', 'address':'北京市海淀区'}
# 2、删除字典中的某个元素(如gender)
del person['gender']
# 3、打印字典
print(person)

② clear()方法:清空字典中的所有key

复制代码
# 1、定义一个有数据的字典
person = {'name':'王大锤', 'age':28, 'gender':'male', 'address':'北京市海淀区'}
# 2、使用clear()方法清空字典
person.clear()
# 3、打印字典
print(person)

2.5 字典的改操作

基本语法:

复制代码
字典名称[key] = value
注:如果key存在则修改这个key对应的值;如果key不存在则新增此键值对。

案例:定义一个字典,里面有name、age以及address,修改address这个key的value值

复制代码
# 1、定义字典
person = {'name':'孙悟空', 'age': 600, 'address':'花果山'}
# 2、修改字典中的数据(address)
person['address'] = '东土大唐'
# 3、打印字典
print(person)

2.6 字典的查操作

① 查询方法:使用具体的某个key查询数据,如果未找到,则直接报错。

复制代码
字典序列[key]

② 字典的相关查询方法

编号 函数 作用
1 get(key, 默认值) 根据字典的key获取对应的value值,如果当前查找的key不存在则返回第二个参数(默认值),如果省略第二个参数,则返回None
2 keys() 以列表返回一个字典所有的键
3 values() 以列表返回字典中的所有值
4 items() 以列表返回可遍历的(键, 值) 元组数组

案例1:使用get获取字典中某个key的value值

复制代码
# 1、定义一个字典
cat = {'name':'Tom', 'age':5, 'address':'美国纽约'}
# 2、获取字典的相关信息
name = cat.get('name')
age = cat.get('age')
gender = cat.get('gender', 'male')  # get(key, 默认值)
address = cat.get('address')
print(f'姓名:{name},年龄:{age},性别:{gender},住址:{address}')

案例2:提取person字典中的所有key

复制代码
# 1、定义一个字典
person = {'name':'貂蝉', 'age':18, 'mobile':'13765022249'}
# 2、提取字典中的name、age以及mobile属性
print(person.keys())

案例3:提取person字典中的所有value值

复制代码
# 1、定义一个字典
person = {'name':'貂蝉', 'age':18, 'mobile':'13765022249'}
# 2、提取字典中的貂蝉、18以及13765022249号码
print(person.values())

案例4:使用items()方法提取数据

复制代码
# 1、定义一个字典
person = {'name':'貂蝉', 'age':18, 'mobile':'13765022249'}
# 2、调用items方法获取数据,dict_items([('name', '貂蝉'), ('age', 18), ('mobile', '13765022249')])
# print(person.items())
# 3、结合for循环对字典中的数据进行遍历
for key, value in person.items():
    print(f'{key}:{value}')

2.7 综合案例:通讯录管理系统

需求:开个一个通讯录的管理系统,主要用于实现存储班级中同学的信息(姓名、年龄、电话)

知识点:==列表、字典、死循环==

延伸:在Python中,我们可以使用字典来保存一个人的基本信息。但是如果想保存多个人的信息,我们必须把列表和字典结合起来。

复制代码
students = [0,1,2]
student = {'name':'刘备', 'age':18, 'mobile': '10086'}
​
组装:
​
students = [{'name':'刘备', 'age':18, 'mobile': '10086'}, {'name':'关羽', 'age':17, 'mobile': '10000'}, {'name':'张飞', 'age':16, 'mobile': '10010'}]

为什么需要死循环:

当我们选中某个菜单时,功能一旦执行完毕,则整个程序就执行结束了。为了保存程序可以一直运行下去,可以模拟死循环的效果,让程序一直运行下去。

复制代码
while True:
    ...

要求:正常情况下,通讯录管理系统应该有4个功能:==增删==改查

复制代码
# 1、定义一个列表,将来用于存储所有学员的通讯信息
students = []
​
while True:
    # 2、打印功能菜单
    print('-' * 40)
    print('欢迎使用传智教育通讯录管理系统V1.0')
    print('[1] 增加学员信息')
    print('[2] 删除学员信息')
    print('[3] 退出系统')
    print('-' * 40)
    
    # 3、提示用户进行相关操作
    user_num = int(input('请输入您要进行的操作编号:'))
​
    if user_num == 1:
        # 4、提示用户输入学员的信息
        student = {}
        student['name'] = input('请输入学员的姓名:')
        student['age'] = int(input('请输入学员的年龄:'))
        student['mobile'] = input('请输入学员的电话:')
        # 5、把学员信息保存在列表中
        students.append(student)
        print(students)
​
    elif user_num == 2:
        name = input('请输入要删除的学员信息:')
        # 6、遍历所有学员信息
        for i in students:
            if i['name'] == name:
                # 从列表中删除整个学员(字典)
                students.remove(i)
                print('删除成功')
                print(students)
                break
        else:
            print('您要删除的学员信息不存在')
​
    elif user_num == 3:
        print('感谢您使用传智教育通讯录管理系统V1.0')
        break
​
    else:
        print('输入错误,请重新输入要操作的编号')

🍔 集合:求交集、并集、差集

3.1 什么是集合

集合(set)是一个无序的不重复元素序列。

① 天生去重

② 无序

3.2 集合的定义

在Python中,我们可以使用一对花括号{}或者set()方法来定义集合,但是如果你定义的集合是一个空集合,则只能使用set()方法。

复制代码
# 定义一个集合
s1 = {10, 20, 30, 40, 50}
print(s1)
print(type(s1))
​
# 定义一个集合:集合中存在相同的数据
s2 = {'刘备', '曹操', '孙权', '曹操'}
print(s2)
print(type(s1))
​
# 定义空集合
s3 = {}
s4 = set()
print(type(s3))  # <class 'dict'>
print(type(s4))  # <class 'set'>

3.3 集合操作的相关方法(增删查)

3.3.1 集合的增操作

① add()方法:向集合中增加一个元素(单一)

复制代码
students = set()
students.add('李哲')
students.add('刘毅')
print(students)

② update()方法:向集合中增加序列类型的数据(字符串、列表、元组、字典)

复制代码
students = set()
list1 = ['刘备', '关羽', '赵云']
students.update(list1)
print(students)
复制代码
students = set()
students.add('刘德华')
students.add('黎明')
# 使用update新增元素
students.update('蔡徐坤')
# students = {'刘德华', '黎明', '蔡', '徐', '坤'}

3.3.2 集合的删操作

① remove()方法:删除集合中的指定数据,如果数据不存在则报错。

② discard()方法:删除集合中的指定数据,如果数据不存在也不会报错。

③ pop()方法:随机删除集合中的某个数据,并返回这个数据。

执行原理:系统自动对集合中的数据进行排序,排序后,pop()方法自动删除第一个元素

复制代码
# 1、定义一个集合
products = {'萝卜', '白菜', '水蜜桃', '奥利奥', '西红柿', '凤梨'}
# 2、使用remove方法删除白菜这个元素
products.remove('白菜')
print(products)
# 3、使用discard方法删除未知元素
products.discard('玉米')
print(products)
# 4、使用pop方法随机删除某个元素
del_product = products.pop()
print(del_product)

3.3.3 集合中的查操作

① in :判断某个元素是否在集合中,如果在,则返回True,否则返回False

② not in :判断某个元素不在集合中,如果不在,则返回True,否则返回False

复制代码
# 定义一个set集合
s1 = {'刘帅', '英标', '高源'}
# 判断刘帅是否在s1集合中
if '刘帅' in s1:
    print('刘帅在s1集合中')
else:
    print('刘帅没有出现在s1集合中')

③ 集合的遍历操作

复制代码
for i in 集合:
    print(i)

3.4 集合中的交集、并集与差集特性

在Python中,我们可以使用&来求两个集合的交集:

在Python中,我们可以使用|来求两个集合的并集:

在Python中,我们可以使用-来求两个集合的差集:

复制代码
# 求集合中的交集、并集、差集
s1 = {'刘备', '关羽', '张飞', '貂蝉'}
s2 = {'袁绍', '吕布', '曹操', '貂蝉'}
​
# 求两个集合中的交集
print(s1 & s2)
​
# 求两个集合中的并集
print(s1 | s2)
​
# 求连个集合中的差集
print(s1 - s2)
print(s2 - s1)

💘若能为您的学习之旅添一丝光亮,不胜荣幸💘

🐼期待您的宝贵意见,让我们共同进步共同成长🐼

相关推荐
baiduopenmap7 分钟前
百度世界2024精选公开课:基于地图智能体的导航出行AI应用创新实践
前端·人工智能·百度地图
小任同学Alex10 分钟前
浦语提示词工程实践(LangGPT版,服务器上部署internlm2-chat-1_8b,踩坑很多才完成的详细教程,)
人工智能·自然语言处理·大模型
新加坡内哥谈技术16 分钟前
微软 Ignite 2024 大会
人工智能
nuclear201129 分钟前
使用Python 在Excel中创建和取消数据分组 - 详解
python·excel数据分组·创建excel分组·excel分类汇总·excel嵌套分组·excel大纲级别·取消excel分组
江瀚视野43 分钟前
Q3净利增长超预期,文心大模型调用量大增,百度未来如何分析?
人工智能
Lucky小小吴44 分钟前
有关django、python版本、sqlite3版本冲突问题
python·django·sqlite
陪学1 小时前
百度遭初创企业指控抄袭,维权还是碰瓷?
人工智能·百度·面试·职场和发展·产品运营
QCN_1 小时前
湘潭大学人工智能考试复习1(软件工程)
人工智能
Landy_Jay1 小时前
深度学习:GPT-1的MindSpore实践
人工智能·gpt·深度学习
白光白光1 小时前
量子神经网络
人工智能·深度学习·神经网络