欢迎回来!🎉 这节课我们要学习Python中最常用的数据结构——列表和字典,它们能帮我们更好地组织和管理数据!
前两节课我们学会了: - 变量和基本数据类型 - 条件判断(if语句) - 循环(for和while)
这节课我们要学习如何用列表和字典来存储更多、更复杂的数据!
列表就是一个可以装很多东西的盒子,就像一个购物清单,里面可以放各种东西,而且顺序是固定的。
# 空列表
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]
fruits = ["苹果", "香蕉"]
# 在末尾添加
fruits.append("橙子")
print(fruits) # ['苹果', '香蕉', '橙子']
# 在指定位置插入
fruits.insert(1, "西瓜") # 在索引1的位置插入西瓜
print(fruits) # ['苹果', '西瓜', '香蕉', '橙子']
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
# 删除指定元素
fruits.remove("香蕉")
print(fruits) # ['苹果', '橙子', '葡萄']
# 删除指定索引的元素
del fruits[0]
print(fruits) # ['橙子', '葡萄']
# 弹出最后一个元素(并返回它)
last = fruits.pop()
print(last) # 葡萄
print(fruits) # ['橙子']
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
print(len(fruits)) # 4
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
# 检查元素是否在列表中
print("香蕉" in fruits) # True
print("西瓜" in fruits) # False
# 找到元素的索引
print(fruits.index("橙子")) # 2
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个水果是葡萄
字典就像一本真实的字典,有"单词"和"解释",在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': '小明'}
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: 北京
person = {
"name": "小明",
"age": 18
}
print("name" in person) # True
print("gender" in person) # False
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):键值对的数据集合
- 创建和访问字典
- 添加、删除、修改键值对
- 遍历字典的键、值、键值对
✅ 列表和字典的组合:存储复杂数据结构
- 列表里装字典
- 字典里装列表
打印出整个列表
创建一个字典,存储一本书的信息(书名、作者、价格、出版年份),然后:
添加一个新的键值对(比如:是否读过)
写一个程序,让用户输入5个学生的姓名和分数,存储在列表里,然后:
下节课预告:我们会学习函数(function),让代码可以重复使用,更加模块化!
继续加油!你已经掌握了Python中最重要的数据结构!💪