← 返回首页 | ← 返回教程列表

Python学习教程 - 第三课:列表和字典,数据的好帮手!

欢迎回来!🎉 这节课我们要学习Python中最常用的数据结构——列表和字典,它们能帮我们更好地组织和管理数据!


复习一下前两节课

前两节课我们学会了: - 变量和基本数据类型 - 条件判断(if语句) - 循环(for和while)

这节课我们要学习如何用列表和字典来存储更多、更复杂的数据!


第一个知识点:列表(List)

列表就是一个可以装很多东西的盒子,就像一个购物清单,里面可以放各种东西,而且顺序是固定的。

创建列表

# 空列表
empty_list = []

# 有内容的列表
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
numbers = [1, 2, 3, 4, 5]
mixed = ["你好", 123, True, 3.14]  # 列表里可以放不同类型的数据

print(fruits)
print(numbers)

运行结果:

['苹果', '香蕉', '橙子', '葡萄']
[1, 2, 3, 4, 5]

访问列表元素

列表里的每个元素都有一个编号,叫做索引,从0开始!

fruits = ["苹果", "香蕉", "橙子", "葡萄"]

# 访问第一个元素(索引0)
print(fruits[0])  # 苹果

# 访问第二个元素(索引1)
print(fruits[1])  # 香蕉

# 访问最后一个元素(可以用-1)
print(fruits[-1])  # 葡萄

# 访问倒数第二个
print(fruits[-2])  # 橙子

修改列表元素

fruits = ["苹果", "香蕉", "橙子", "葡萄"]

# 把香蕉改成西瓜
fruits[1] = "西瓜"
print(fruits)  # ['苹果', '西瓜', '橙子', '葡萄']

列表切片(取一部分)

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 取索引2到5(不包括5)
print(numbers[2:5])  # [2, 3, 4]

# 取前3个
print(numbers[:3])  # [0, 1, 2]

# 取从索引4到最后
print(numbers[4:])  # [4, 5, 6, 7, 8, 9]

# 每隔2个取一个
print(numbers[::2])  # [0, 2, 4, 6, 8]

第二个知识点:列表的常用操作

1. 添加元素

fruits = ["苹果", "香蕉"]

# 在末尾添加
fruits.append("橙子")
print(fruits)  # ['苹果', '香蕉', '橙子']

# 在指定位置插入
fruits.insert(1, "西瓜")  # 在索引1的位置插入西瓜
print(fruits)  # ['苹果', '西瓜', '香蕉', '橙子']

2. 删除元素

fruits = ["苹果", "香蕉", "橙子", "葡萄"]

# 删除指定元素
fruits.remove("香蕉")
print(fruits)  # ['苹果', '橙子', '葡萄']

# 删除指定索引的元素
del fruits[0]
print(fruits)  # ['橙子', '葡萄']

# 弹出最后一个元素(并返回它)
last = fruits.pop()
print(last)  # 葡萄
print(fruits)  # ['橙子']

3. 列表长度

fruits = ["苹果", "香蕉", "橙子", "葡萄"]
print(len(fruits))  # 4

4. 查找元素

fruits = ["苹果", "香蕉", "橙子", "葡萄"]

# 检查元素是否在列表中
print("香蕉" in fruits)  # True
print("西瓜" in fruits)  # False

# 找到元素的索引
print(fruits.index("橙子"))  # 2

5. 排序

numbers = [3, 1, 4, 1, 5, 9, 2, 6]

# 排序(会改变原列表)
numbers.sort()
print(numbers)  # [1, 1, 2, 3, 4, 5, 6, 9]

# 倒序
numbers.sort(reverse=True)
print(numbers)  # [9, 6, 5, 4, 3, 2, 1, 1]

# 字符串列表按字母顺序排序
fruits = ["banana", "apple", "orange", "grape"]
fruits.sort()
print(fruits)  # ['apple', 'banana', 'grape', 'orange']

第三个知识点:遍历列表

用for循环遍历列表非常方便!

fruits = ["苹果", "香蕉", "橙子", "葡萄"]

# 简单遍历
for fruit in fruits:
    print(f"我喜欢吃{fruit}")

# 带索引遍历
for i, fruit in enumerate(fruits):
    print(f"第{i+1}个水果是{fruit}")

运行结果:

我喜欢吃苹果
我喜欢吃香蕉
我喜欢吃橙子
我喜欢吃葡萄
第1个水果是苹果
第2个水果是香蕉
第3个水果是橙子
第4个水果是葡萄

第四个知识点:字典(Dictionary)

字典就像一本真实的字典,有"单词"和"解释",在Python里叫"键"(key)和"值"(value)。

创建字典

# 空字典
empty_dict = {}

# 有内容的字典
person = {
    "name": "小明",
    "age": 18,
    "city": "北京",
    "is_student": True
}

print(person)

运行结果:

{'name': '小明', 'age': 18, 'city': '北京', 'is_student': True}

访问字典的值

person = {
    "name": "小明",
    "age": 18,
    "city": "北京"
}

# 通过键访问值
print(person["name"])  # 小明
print(person["age"])   # 18

# 使用get方法(更安全,键不存在时返回None)
print(person.get("city"))      # 北京
print(person.get("gender"))    # None(不会报错)
print(person.get("gender", "未知"))  # 未知(可以指定默认值)

修改和添加

person = {
    "name": "小明",
    "age": 18,
    "city": "北京"
}

# 修改值
person["age"] = 19
print(person)  # {'name': '小明', 'age': 19, 'city': '北京'}

# 添加新的键值对
person["gender"] = "男"
print(person)  # {'name': '小明', 'age': 19, 'city': '北京', 'gender': '男'}

删除

person = {
    "name": "小明",
    "age": 18,
    "city": "北京"
}

# 删除指定键值对
del person["city"]
print(person)  # {'name': '小明', 'age': 18}

# 弹出指定键(并返回值)
age = person.pop("age")
print(age)     # 18
print(person)  # {'name': '小明'}

第五个知识点:字典的常用操作

1. 遍历字典

person = {
    "name": "小明",
    "age": 18,
    "city": "北京"
}

# 遍历所有键
print("键:")
for key in person.keys():
    print(key)

# 遍历所有值
print("\n值:")
for value in person.values():
    print(value)

# 遍历键值对
print("\n键值对:")
for key, value in person.items():
    print(f"{key}: {value}")

运行结果:

键:
name
age
city

值:
小明
18
北京

键值对:
name: 小明
age: 18
city: 北京

2. 检查键是否存在

person = {
    "name": "小明",
    "age": 18
}

print("name" in person)    # True
print("gender" in person)  # False

3. 字典长度

person = {
    "name": "小明",
    "age": 18,
    "city": "北京"
}
print(len(person))  # 3

第六个知识点:列表和字典的组合

列表和字典可以组合使用,存储更复杂的数据!

列表里装字典

# 多个学生的信息
students = [
    {"name": "小明", "age": 18, "score": 90},
    {"name": "小红", "age": 17, "score": 85},
    {"name": "小刚", "age": 19, "score": 95}
]

# 遍历所有学生
for student in students:
    print(f"{student['name']}{student['age']}岁,分数:{student['score']}")

# 找出分数最高的学生
best_student = max(students, key=lambda s: s["score"])
print(f"\n分数最高的是:{best_student['name']}{best_student['score']}分")

字典里装列表

# 一个学生的多门课程成绩
student = {
    "name": "小明",
    "courses": ["数学", "语文", "英语"],
    "scores": [90, 85, 95]
}

# 打印成绩单
print(f"{student['name']}的成绩单:")
for course, score in zip(student["courses"], student["scores"]):
    print(f"{course}{score}分")

# 计算平均分
average = sum(student["scores"]) / len(student["scores"])
print(f"\n平均分:{average}分")

综合练习:学生管理系统

# 学生列表
students = []

def show_menu():
    print("\n=== 学生管理系统 ===")
    print("1. 添加学生")
    print("2. 查看所有学生")
    print("3. 查找学生")
    print("4. 删除学生")
    print("5. 退出")

def add_student():
    name = input("请输入学生姓名:")
    age = int(input("请输入学生年龄:"))
    score = int(input("请输入学生分数:"))

    student = {
        "name": name,
        "age": age,
        "score": score
    }
    students.append(student)
    print(f"学生{name}添加成功!")

def show_all_students():
    if not students:
        print("还没有学生信息!")
        return

    print("\n=== 学生列表 ===")
    for i, student in enumerate(students, 1):
        print(f"{i}. {student['name']}{student['age']}岁,分数:{student['score']}")

def find_student():
    name = input("请输入要查找的学生姓名:")
    found = False

    for student in students:
        if student["name"] == name:
            print(f"找到学生:{student['name']}{student['age']}岁,分数:{student['score']}")
            found = True
            break

    if not found:
        print(f"没有找到名为{name}的学生")

def delete_student():
    name = input("请输入要删除的学生姓名:")
    found = False

    for student in students:
        if student["name"] == name:
            students.remove(student)
            print(f"学生{name}删除成功!")
            found = True
            break

    if not found:
        print(f"没有找到名为{name}的学生")

# 主程序
while True:
    show_menu()
    choice = input("请选择操作(1-5):")

    if choice == "1":
        add_student()
    elif choice == "2":
        show_all_students()
    elif choice == "3":
        find_student()
    elif choice == "4":
        delete_student()
    elif choice == "5":
        print("谢谢使用,再见!")
        break
    else:
        print("输入无效,请重新选择!")

第三课小结

今天我们学会了:

列表(List):有序的数据集合
- 创建和访问列表 - 添加、删除、修改元素 - 列表切片和排序 - 遍历列表

字典(Dictionary):键值对的数据集合
- 创建和访问字典 - 添加、删除、修改键值对 - 遍历字典的键、值、键值对

列表和字典的组合:存储复杂数据结构
- 列表里装字典 - 字典里装列表


课后练习 ✏️

  1. 创建一个列表,存储你喜欢的5种食物,然后:
  2. 添加第6种食物
  3. 删除第3种食物
  4. 把第2种食物改成另一种
  5. 打印出整个列表

  6. 创建一个字典,存储一本书的信息(书名、作者、价格、出版年份),然后:

  7. 打印出书的所有信息
  8. 修改价格
  9. 添加一个新的键值对(比如:是否读过)

  10. 写一个程序,让用户输入5个学生的姓名和分数,存储在列表里,然后:

  11. 找出分数最高的学生
  12. 计算平均分
  13. 按分数从高到低排序

下节课预告:我们会学习函数(function),让代码可以重复使用,更加模块化!

继续加油!你已经掌握了Python中最重要的数据结构!💪