Skip to content

第9章:列表与元组操作

9.1 列表(list,最常用容器)

列表是Python中最常用的数据容器之一,用于存储多个元素。列表是有序的、可变的,可以存储不同类型的数据。

列表创建

  • 语法:使用方括号[]创建列表
  • 示例
    python
    # 创建空列表
    empty_list = []
    
    # 创建包含不同类型元素的列表
    mixed_list = [1, 2, "Python", True, 3.14]
    
    # 使用list()函数创建列表
    list_from_string = list("hello")  # ['h', 'e', 'l', 'l', 'o']
    list_from_tuple = list((1, 2, 3))  # [1, 2, 3]

列表访问

  • 语法:通过索引访问列表元素,索引从0开始
  • 示例
    python
    fruits = ["apple", "banana", "cherry"]
    print(fruits[0])  # 输出:apple
    print(fruits[1])  # 输出:banana
    print(fruits[2])  # 输出:cherry
    
    # 负数索引(从末尾开始)
    print(fruits[-1])  # 输出:cherry
    print(fruits[-2])  # 输出:banana

列表修改

  • 语法:通过索引修改列表元素
  • 示例
    python
    fruits = ["apple", "banana", "cherry"]
    fruits[0] = "orange"
    print(fruits)  # 输出:['orange', 'banana', 'cherry']

列表增删

  • 添加元素

    • append():在列表末尾添加元素
    • insert():在指定位置添加元素
    • 示例:
      python
      fruits = ["apple", "banana"]
      fruits.append("cherry")  # 添加到末尾
      print(fruits)  # 输出:['apple', 'banana', 'cherry']
      
      fruits.insert(1, "orange")  # 添加到指定位置
      print(fruits)  # 输出:['apple', 'orange', 'banana', 'cherry']
  • 删除元素

    • remove():删除指定值的元素
    • pop():删除指定索引的元素(默认删除最后一个)
    • del:删除指定索引的元素或整个列表
    • 示例:
      python
      fruits = ["apple", "orange", "banana", "cherry"]
      fruits.remove("orange")  # 删除指定值
      print(fruits)  # 输出:['apple', 'banana', 'cherry']
      
      removed_fruit = fruits.pop(1)  # 删除指定索引
      print(removed_fruit)  # 输出:banana
      print(fruits)  # 输出:['apple', 'cherry']
      
      del fruits[0]  # 删除指定索引
      print(fruits)  # 输出:['cherry']

列表排序

  • sort():对列表进行升序排序
  • reverse():反转列表元素顺序
  • 示例
    python
    numbers = [3, 1, 4, 1, 5, 9, 2, 6]
    numbers.sort()  # 升序排序
    print(numbers)  # 输出:[1, 1, 2, 3, 4, 5, 6, 9]
    
    numbers.reverse()  # 反转列表
    print(numbers)  # 输出:[9, 6, 5, 4, 3, 2, 1, 1]

列表切片

  • 语法列表[起始索引:结束索引:步长]
  • 示例
    python
    numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    print(numbers[2:5])    # 输出:[2, 3, 4]
    print(numbers[:5])     # 输出:[0, 1, 2, 3, 4]
    print(numbers[5:])     # 输出:[5, 6, 7, 8, 9]
    print(numbers[::2])    # 输出:[0, 2, 4, 6, 8]
    print(numbers[::-1])   # 输出:[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

9.2 元组(tuple,不可修改容器)

元组是另一种重要的容器类型,与列表类似,但元组是不可修改的(immutable)。

元组创建

  • 语法:使用圆括号()创建元组
  • 示例
    python
    # 创建空元组
    empty_tuple = ()
    
    # 创建包含元素的元组
    simple_tuple = (1, 2, 3)
    mixed_tuple = (1, "Python", True, 3.14)
    
    # 单元素元组(注意逗号)
    single_element_tuple = (1,)
    
    # 不使用括号创建元组(元组打包)
    tuple_packing = 1, 2, 3

元组访问

  • 语法:通过索引访问元组元素,与列表相同
  • 示例
    python
    fruits = ("apple", "banana", "cherry")
    print(fruits[0])  # 输出:apple
    print(fruits[-1])  # 输出:cherry

元组特点

  • 不可修改:元组创建后不能修改其元素
  • 适合存储固定数据:如坐标、身份证号等不需要修改的数据
  • 示例
    python
    fruits = ("apple", "banana", "cherry")
    # fruits[0] = "orange"  # 错误:'tuple' object does not support item assignment

列表与元组的区别

特性列表元组
可修改性可变不可变
创建语法[]()
性能相对较低相对较高
适用场景存储需要修改的数据存储固定不变的数据
方法丰富(append, insert, remove等)较少(count, index等)

实操案例:学生列表管理

案例:学生列表管理

python
"""
学生列表管理
功能:添加、删除、修改学生信息
"""

# 初始化学生列表
students = [
    {"name": "张三", "age": 18, "grade": "高一"},
    {"name": "李四", "age": 17, "grade": "高二"},
    {"name": "王五", "age": 19, "grade": "高三"}
]

# 打印学生列表
def print_students():
    print("\n=== 学生列表 ===")
    for i, student in enumerate(students):
        print(f"{i+1}. 姓名: {student['name']}, 年龄: {student['age']}, 年级: {student['grade']}")
    print("================\n")

# 添加学生
def add_student():
    name = input("请输入学生姓名:")
    age = int(input("请输入学生年龄:"))
    grade = input("请输入学生年级:")
    students.append({"name": name, "age": age, "grade": grade})
    print("学生添加成功!")

# 删除学生
def remove_student():
    index = int(input("请输入要删除的学生序号:")) - 1
    if 0 <= index < len(students):
        removed_student = students.pop(index)
        print(f"删除成功!删除的学生:{removed_student['name']}")
    else:
        print("学生序号不存在!")

# 修改学生信息
def update_student():
    index = int(input("请输入要修改的学生序号:")) - 1
    if 0 <= index < len(students):
        student = students[index]
        print(f"当前学生信息:姓名: {student['name']}, 年龄: {student['age']}, 年级: {student['grade']}")
        name = input("请输入新姓名(按回车保持不变):")
        age = input("请输入新年龄(按回车保持不变):")
        grade = input("请输入新年级(按回车保持不变):")
        
        if name:
            student['name'] = name
        if age:
            student['age'] = int(age)
        if grade:
            student['grade'] = grade
        
        print("学生信息修改成功!")
    else:
        print("学生序号不存在!")

# 主菜单
def main():
    while True:
        print("\n学生管理系统")
        print("1. 查看学生列表")
        print("2. 添加学生")
        print("3. 删除学生")
        print("4. 修改学生信息")
        print("5. 退出")
        
        choice = input("请输入选择:")
        
        if choice == "1":
            print_students()
        elif choice == "2":
            add_student()
        elif choice == "3":
            remove_student()
        elif choice == "4":
            update_student()
        elif choice == "5":
            print("退出系统!")
            break
        else:
            print("输入错误,请重新输入!")

if __name__ == "__main__":
    main()

运行结果

学生管理系统
1. 查看学生列表
2. 添加学生
3. 删除学生
4. 修改学生信息
5. 退出
请输入选择:1

=== 学生列表 ===
1. 姓名: 张三, 年龄: 18, 年级: 高一
2. 姓名: 李四, 年龄: 17, 年级: 高二
3. 姓名: 王五, 年龄: 19, 年级: 高三
================

学生管理系统
1. 查看学生列表
2. 添加学生
3. 删除学生
4. 修改学生信息
5. 退出
请输入选择:2
请输入学生姓名:赵六
请输入学生年龄:18
请输入学生年级:高一
学生添加成功!

学生管理系统
1. 查看学生列表
2. 添加学生
3. 删除学生
4. 修改学生信息
5. 退出
请输入选择:1

=== 学生列表 ===
1. 姓名: 张三, 年龄: 18, 年级: 高一
2. 姓名: 李四, 年龄: 17, 年级: 高二
3. 姓名: 王五, 年龄: 19, 年级: 高三
4. 姓名: 赵六, 年龄: 18, 年级: 高一
================

实操案例:固定数据存储(用元组)

案例:固定数据存储

python
"""
固定数据存储
功能:使用元组存储固定不变的数据
"""

# 存储一周的星期几
weekdays = ("星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日")

# 存储月份天数(非闰年)
month_days = (
    31,  # 1月
    28,  # 2月
    31,  # 3月
    30,  # 4月
    31,  # 5月
    30,  # 6月
    31,  # 7月
    31,  # 8月
    30,  # 9月
    31,  # 10月
    30,  # 11月
    31   # 12月
)

# 存储RGB颜色值
colors = (
    (255, 0, 0),    # 红色
    (0, 255, 0),    # 绿色
    (0, 0, 255),    # 蓝色
    (255, 255, 0),  # 黄色
    (255, 0, 255),  # 洋红色
    (0, 255, 255),  # 青色
    (255, 255, 255),# 白色
    (0, 0, 0)       # 黑色
)

# 打印数据
print("一周的星期几:")
for day in weekdays:
    print(day, end=" ")
print()

print("\n各月份天数:")
for i, days in enumerate(month_days, 1):
    print(f"{i}月: {days}天")

print("\nRGB颜色值:")
color_names = ["红色", "绿色", "蓝色", "黄色", "洋红色", "青色", "白色", "黑色"]
for name, rgb in zip(color_names, colors):
    print(f"{name}: {rgb}")

运行结果

一周的星期几:
星期一 星期二 星期三 星期四 星期五 星期六 星期日 

各月份天数:
1月: 31天
2月: 28天
3月: 31天
4月: 30天
5月: 31天
6月: 30天
7月: 31天
8月: 31天
9月: 30天
10月: 31天
11月: 30天
12月: 31天

RGB颜色值:
红色: (255, 0, 0)
绿色: (0, 255, 0)
蓝色: (0, 0, 255)
黄色: (255, 255, 0)
洋红色: (255, 0, 255)
青色: (0, 255, 255)
白色: (255, 255, 255)
黑色: (0, 0, 0)

新手易错点

  • 列表索引越界:访问不存在的索引会导致错误

    python
    fruits = ["apple", "banana"]
    print(fruits[5])  # 错误:list index out of range
  • 误修改元组元素:尝试修改元组元素会导致错误

    python
    fruits = ("apple", "banana")
    fruits[0] = "orange"  # 错误:'tuple' object does not support item assignment
  • 列表方法使用错误:混淆方法的使用方式

    python
    fruits = ["apple", "banana"]
    # 错误:append方法不返回新列表
    new_fruits = fruits.append("cherry")
    print(new_fruits)  # 输出:None
    
    # 正确:append方法修改原列表
    fruits.append("cherry")
    print(fruits)  # 输出:['apple', 'banana', 'cherry']

通过本章的学习,你已经掌握了Python中列表和元组的基本操作。列表是可变的、功能丰富的容器,适合存储需要修改的数据;而元组是不可变的容器,适合存储固定不变的数据。在实际编程中,你会根据具体需求选择合适的容器类型。

© 2026 编程马·菜鸟教程 版权所有