Python 组合数据类型

以下是 Python 组合数据类型的完整笔记整理


第5章 组合数据类型

一、序列与索引

1. 序列概念
  • 定义:存储多个值的连续空间,每个值对应一个整数索引。
  • 索引方向
    • 正向递增0, 1, 2, ..., N-1
    • 反向递减-1, -2, ..., -N
2. 切片操作
  • 语法序列[start:end:step]
    • start:起始索引(包含)。
    • end:结束索引(不包含)。
    • step:步长(默认1)。
  • 示例
    s = "Python"
    print(s[0:5:2])  # 输出 "Pto"(索引0,2,4)
    
3. 序列相加
  • 同类型序列可通过 + 拼接:
    list1 = [1, 2] + [3, 4]  # 结果:[1, 2, 3, 4]
    
操作符/函数描述说明
x in s如果xs的元素,结果为True,否则结果为False
x not in s如果x不是s的元素,结果为True,否则结果为False
len(s)序列s中元素的个数(即序列的长度)
max(s)序列s中元素的最大值
min(s)序列s中元素的最小值
s.index(x)序列s中第一次出现元素x的位置
s.count(x)序列s中出现x的总次数

二、列表(List)

1. 定义与特性
  • 可变序列,元素可修改。
  • 创建方式
    # 方式1:直接创建
    lst = [1, "a", True]
    # 方式2:使用list()函数
    lst = list("hello")  # 输出:['h', 'e', 'l', 'l', 'o']
    
  • 删除列表del 列表名
2. 常用操作
  • 遍历(结合 enumerate):
    for index, item in enumerate(lst):
        print(f"索引{index},元素{item}")
    
操作操作方法描述
添加元素append(item)在末尾添加元素
添加元素insert(index, item)在指定位置插入元素
删除元素remove(item)删除首个匹配项
删除元素pop(index)删除并返回指定位置元素
删除元素clear()清空列表
复制lst.copy()拷贝列表lst中的所有元素,生成一个新的列表
反转lst.reverse()将列表lst中的元素反转
排序lst.sort(reverse = True)原地降序排序
排序sorted(lst)返回新排序列表
  • 生成式
    # 生成1~10的偶数列表
    lst = [x for x in range(1, 11) if x % 2 == 0]  # [2,4,6,8,10]
    
3. 二维列表
  • 表示表格数据,遍历方式:
    matrix = [[1,2], [3,4]]
    for row in matrix:
        for item in row:
            print(item)  # 输出1→2→3→4
    

三、元组(Tuple)

1. 定义与特性
  • 不可变序列,元素不可修改。
  • 创建方式
    # 方式1:直接创建(单元素需加逗号)
    t1 = (1, "a", True)
    t2 = (10,)  # 单元素元组
    # 方式2:使用tuple()函数
    t3 = tuple("abc")  # ('a', 'b', 'c')
    
  • 删除元组del 元组名
2. 元组生成式
  • 生成器对象需转换为元组或列表查看:
    gen = (x*2 for x in range(3))
    t = tuple(gen)  # (0, 2, 4)
    
3. 元组 vs 列表
元组列表
不可变序列可变序列
无法实现添加、删除和修改元素等操作可通过append()insert()remove()pop()等方法实现添加和删除列表元素
支持切片访问元素,但不支持修改操作支持切片访问和修改列表中的元素
访问和处理速度快访问和处理速度慢
可以作为字典的键不能作为字典的键

四、字典(Dict)

1. 定义与特性
  • 键值对集合,键唯一且不可变(如字符串、数字)。
  • 创建方式
    # 方式1:直接创建
    d1 = {"name": "Alice", "age": 20}
    # 方式2:使用dict()函数
    d2 = dict(name="Bob", age=25)
    d3 = dict(zip(["a", "b"], [1, 2]))  # {'a':1, 'b':2}
    
2. 常用操作
  • 取值
    print(d1["name"])  # Alice(键不存在报错)
    print(d1.get("gender", "未知"))  # 安全取值,默认"未知"
    
  • 遍历
    #遍历出key与value的元组
    for element in d.items():
    	pass
    #分别遍历出key和value
    for key,value in d.items():
      	pass
    
  • 生成式
    keys = ["a", "b"]
    values = [1, 2]
    d = {k: v for k, v in zip(keys, values)}  # {'a':1, 'b':2}
    
方法说明
d.keys()获取所有的key数据
d.values()获取所有的value数据
d.pop(key, default)key存在则获取相应的value,同时删除该key - value对;否则获取默认值
d.popitem()随机从字典中取出一个key - value对,结果为元组类型,同时将该key - value从字典中删除
d.clear()清空字典中所有的key - value

五、集合(Set)

1. 定义与特性
  • 无序不重复元素序列,元素需为不可变类型。
  • 创建方式
    # 方式1:直接创建
    s1 = {1, 2, 3}
    # 方式2:使用set()函数
    s2 = set("hello")  # {'h', 'e', 'l', 'o'}
    
2. 常用操作
集合的方法描述说明
s.add(x)如果x不在集合s中,则将x添加到集合s
s.remove(x)如果x在集合中,将其删除;如果不在集合中,程序报错
s.clear()清除集合中所有元素
  • 集合运算
    a = {1, 2}; b = {2, 3}
    print(a | b)  # 并集 {1,2,3}
    print(a & b)  # 交集 {2}
    print(a - b)  # 差集 {1}
    print(a ^ b)  # 补集 {2,3}
    

六、Python 3.11新特性

  1. 结构模式匹配match-case):
    data = [1, 2]
    match data:
        case (x, y):
            print(f"元组: {x}, {y}")
        case _:
            print("未知类型")
    
  2. 字典合并运算符 |
    d1 = {"a": 1}; d2 = {"b": 2}
    merged = d1 | d2  # {'a':1, 'b':2}
    

七、实战练习

1. 千年虫问题
years = [88, 89, 90, 98, 00, 99]
fixed = []
for y in years:
    if y == 0:
        fixed.append(2000)
    else:
        fixed.append(1900 + y)
print(fixed)  # [1988, 1989, 1990, 1998, 2000, 1999]
2. 模拟京东购物
cart = []
products = []
for _ in range(5):
    info = input("输入商品ID和名称(如1001 手机): ").split()
    products.append({"id": info[0], "name": info[1]})

print("商品列表:")
for p in products:
    print(f"{p['id']} {p['name']}")

while True:
    choice = input("选择商品ID或输入q退出: ")
    if choice == "q":
        break
    product = next((p for p in products if p["id"] == choice), None)
    if product:
        cart.insert(0, product)  # 逆序添加
    else:
        print("商品不存在!")

print("购物车:", [p["name"] for p in cart])

总结对比

类型可变性有序性语法典型应用
列表可变有序[]动态数据集合
元组不可变有序()常量或保护数据
字典可变无序{}键值对映射
集合可变无序{}去重或集合运算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

盐可颂

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

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

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

打赏作者

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

抵扣说明:

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

余额充值