10.元组与集合

10.元组与集合

欢迎来到《10天学会Python》第5天!昨天学习了灵活的列表,今天认识两个特色数据结构:元组(Tuple)集合(Set)

核心概念

元组:不可变容器

元组是有序且不可变的数据容器,创建后不能修改。适合存储坐标、配置等固定数据,保护数据安全。

python

# 创建元组
coordinates = (10, 20)  # 经纬度坐标
colors = ("红", "绿", "蓝")  # RGB三原色
single = (100,)  # 单元素元组,逗号不能少

重要特性

  • 不可变性:不能修改、添加或删除元素
  • 有序性:支持索引和切片访问
  • 可哈希性:可作为字典的键

元组解包:可以一次性赋值给多个变量

python

x, y = coordinates  # x=10, y=20

集合:唯一性容器

集合是无序且元素唯一的容器,自动去重,查找速度快。适合去重、快速查找场景。

python

# 创建集合
lottery_numbers = {3, 7, 12, 22, 30}  # 彩票号码
vowels = set("aeiou")  # 元音字母集合

重要特性

  • 唯一性:自动去除重复元素
  • 无序性:元素无固定顺序,不能索引访问
  • 高效性:查找元素速度快

创建方法

元组创建

  1. 直接创建dimensions = (1920, 1080)(最常用)
  2. tuple()转换tuple("Hello")('H','e','l','l','o')
  3. 省略括号point = 10, 20(逗号是关键)

集合创建

  1. 直接创建primes = {2, 3, 5, 7}(大括号)
  2. set()转换set("banana"){'b','a','n'}(自动去重)
  3. 集合推导式{x for x in range(1,21) if x%3==0}{3,6,9,12,15,18}

代码示例(5个生活场景)

示例1:地理坐标系统

python

beijing = (39.9042, 116.4074)  # 北京经纬度
lat, lon = beijing  # 元组解包
print(f"北京纬度:{lat},经度:{lon}")
# beijing[0] = 40.0  # 会报错!元组不可修改

示例2:一周日程安排

python

week_schedule = ("周一会议", "周二开发", "周三学习", "周四合作", "周五总结", "周六休息", "周日家庭")
workdays = week_schedule[:5]  # 切片获取工作日
for day in workdays:
    print(day)

示例3:朋友圈点赞统计

python

likes = ["小明", "小红", "小刚", "小明", "小红", "小丽"]
unique_likers = set(likes)  # 自动去重
print(f"唯一点赞{len(unique_likers)}人:{unique_likers}")

示例4:购物清单去重

python

raw_list = ["牛奶", "面包", "鸡蛋", "牛奶", "苹果", "面包"]
unique_items = set(raw_list)  # 去重
print(f"去重后清单:{list(unique_items)}")

示例5:兴趣交集匹配

python

alice = {"读书", "旅行", "摄影", "美食"}
bob = {"游戏", "摄影", "美食", "运动"}
common = alice & bob  # 交集:共同爱好
all_hobbies = alice | bob  # 并集:所有爱好
print(f"共同爱好:{common},所有爱好:{all_hobbies}")

对比讲解:列表 vs 元组 vs 集合

特性 列表(List) 元组(Tuple) 集合(Set)
可变性 ✅ 可变 ❌ 不可变 ✅ 可变
有序性 ✅ 有序 ✅ 有序 ❌ 无序
元素唯一性 ❌ 允许重复 ❌ 允许重复 ✅ 唯一

选择指南

  • 列表:需要频繁增删改查的数据集合
  • 元组:需要保护数据不被修改(如配置、坐标)
  • 集合:需要快速查找或去重(如用户ID、关键词)

实践应用:智能通讯录系统

python

contacts = [("张三", "13800138000"), ("李四", "13900139000")]
tags = {"同事", "朋友", "家人"}

def find_contact(name):
    for contact in contacts:
        if contact[0] == name:
            return contact
    return None

contact = find_contact("张三")
if contact:
    print(f"找到:{contact[0]},电话:{contact[1]}")

练习题

练习1:基础操作

  1. 创建元组 student = ("小明", 18, "计算机"),分别用索引和解包两种方式获取年龄
  2. 创建集合 numbers = {1, 3, 5, 7, 9},添加偶数 {2, 4, 6, 8} 后删除数字5
  3. 检查元组 colors = ("红", "绿", "蓝") 是否包含"黄色"

练习2:数据处理

给定列表 scores = [85, 92, 78, 85, 90, 92, 78, 85]

  1. 转换为集合,统计不同分数数量
  2. 找出最高分和最低分
  3. 合并新分数 [88, 92, 95] 并去重

练习3:集合运算实战

有两个班级的学生名单:

python

class_a = {"小明", "小红", "小刚", "小丽"}
class_b = {"小强", "小红", "小华", "小丽"}

计算:

  1. 两个班级共有哪些学生?
  2. 只在A班不在B班的学生?
  3. 两个班级所有不重复的学生总数?

总结

元组保护数据安全,集合提高处理效率。根据需求选择合适的数据结构。

明天学习强大的字典(Dict)!


学习建议:多动手练习,理解不同数据结构的适用场景。

9.列表(List)操作 2026-01-21
11.字典(Dict)操作 2026-01-21

评论区