当前位置:首页>python>第7篇:列表和字典——Python的收纳神器

第7篇:列表和字典——Python的收纳神器

  • 2026-09-06 04:54:09
第7篇:列表和字典——Python的收纳神器

一、为什么需要列表和字典?

先想一个问题:假设你是个班主任,要记录全班40个同学的名字。之前的知识里,你可能会这样做:

name1 = "张三"
name2 = "李四"
name3 = "王五"
# ……天哪,要写40个变量!

这样做有两个明显的问题:第一,变量名太多,自己都会搞混;第二,如果要遍历全班同学(比如点名),根本没法批量处理。

列表(List)和字典(Dict)就是为了解决这类问题而生的。它们是 Python 里最常用的两种"容器"——说白了,就是用来装东西的。只不过它们比变量更聪明,能帮你组织、管理、查找大量数据。


二、列表:有序的数据集合

创建列表

列表用方括号 [] 来表示,元素之间用逗号分隔:

# 一个包含5个数字的列表
scores = [85, 92, 78, 96, 88]

# 一个包含4个字符串的列表

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

# 混合类型的列表(Python允许,但不推荐混用)

mixed = ["小明", 18, 1.75, True]

# 空列表

empty = []

访问列表元素

列表里的每个元素都有一个"编号",从 0 开始,这个编号叫索引(index)。

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

print
(fruits[0])  # 苹果,第一个元素
print
(fruits[1])  # 香蕉,第二个元素
print
(fruits[2])  # 橙子,第三个元素
print
(fruits[3])  # 葡萄,第四个元素

特别提醒:索引从 0 开始,不是从 1 开始。这是编程界的惯例,几乎所有编程语言都是这样。所以 fruits[0] 是第一个元素,fruits[3] 是第四个元素。如果写成 fruits[4],会报错——索引超出范围。

Python 还支持负数索引,表示"从右边数第几个":

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

print
(fruits[-1])  # 葡萄,最右边一个
print
(fruits[-2])  # 橙子,右边第二个
print
(fruits[-4])  # 苹果,右边第四个

修改列表元素

列表是可变的——你可以随时修改、增加、删除元素:

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

fruits[0] = "西瓜"  # 把第一个元素改成"西瓜"
print
(fruits)  # ['西瓜', '香蕉', '橙子']

fruits.append("草莓")  # 在末尾添加"草莓"
print
(fruits)  # ['西瓜', '香蕉', '橙子', '草莓']

fruits.insert(1, "桃子")  # 在索引1的位置插入"桃子"
print
(fruits)  # ['西瓜', '桃子', '香蕉', '橙子', '草莓']

removed = fruits.pop()  # 弹出并返回最后一个元素
print
(removed)  # 草莓
print
(fruits)  # ['西瓜', '桃子', '香蕉', '橙子']

列表切片:截取子列表

如果你只需要列表的一部分,可以用切片操作:

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

print
(numbers[2:6])   # [2, 3, 4, 5],从索引2到索引6(不含6)
print
(numbers[:4])     # [0, 1, 2, 3],从头到索引4(不含4)
print
(numbers[6:])     # [6, 7, 8, 9],从索引6到末尾
print
(numbers[::2])    # [0, 2, 4, 6, 8],每两个取一个(步长为2)
print
(numbers[::-1])   # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0],倒序

遍历列表

遍历就是"一个一个地取出列表中的元素"。for 循环和列表是天生一对:

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

for
 fruit in fruits:
    print
("我喜欢吃", fruit)

for fruit in fruits 的意思是:从 fruits 列表里依次取出每个元素,赋值给变量 fruit,然后执行循环体。

如果要同时获取元素和索引,用 enumerate() 函数:

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

for
 index, fruit in enumerate(fruits):
    print
(f"第{index + 1}个水果是:{fruit}")

三、字典:键值对的数据容器

列表适合存放"一串有序的数据",但有时候我们需要更灵活的组织方式——用名字来查找数据,而不是用数字索引。

比如存储一个学生的信息:姓名、年龄、班级、专业。如果用列表,你需要记住哪个位置存的是什么:

# 列表方式
student = ["张三", 19, "计算机1班", "软件工程"]
# 必须记住:索引0是姓名,1是年龄,2是班级,3是专业

字典则更直观——用键(key)来标识每个数据:

# 字典方式
student = {
    "姓名"
: "张三",
    "年龄"
: 19,
    "班级"
: "计算机1班",
    "专业"
: "软件工程"
}

# 用键来访问对应的值

print
(student["姓名"])  # 张三
print
(student["年龄"])   # 19

字典用大括号 {} 包裹,每个元素是一个"键值对"——键和值用冒号分隔,多个键值对之间用逗号分隔。

访问字典

# 用键访问值(如果键不存在会报错)
print
(student["姓名"])

# 用 get 方法访问(键不存在时返回默认值,而不是报错)

print
(student.get("电话", "暂无"))  # 键不存在,返回"暂无"

# 添加或修改字典项

student["电话"] = "13800138000"  # 添加新键值对
student["年龄"] = 20              # 修改已有的键值对

遍历字典

字典的遍历有三种常见方式:

student = {
    "姓名"
: "张三",
    "年龄"
: 19,
    "班级"
: "计算机1班",
    "专业"
: "软件工程"
}

# 遍历所有键

for
 key in student:
    print
(key)

# 遍历所有值

for
 value in student.values():
    print
(value)

# 同时遍历键和值

for
 key, value in student.items():
    print
(f"{key}:{value}")

四、列表和字典的组合使用

列表和字典可以互相嵌套,形成更复杂的数据结构。比如存储多个学生的信息:

students = [
    {"姓名": "张三", "年龄": 19, "专业": "软件工程"},
    {"姓名": "李四", "年龄": 20, "专业": "计算机科学"},
    {"姓名": "王五", "年龄": 18, "专业": "信息安全"}
]

# 打印第二个学生的专业

print
(students[1]["专业"])  # 计算机科学

# 遍历所有学生,打印姓名

for
 s in students:
    print
(s["姓名"])

这种"列表套字典"的结构在实际编程中非常常见,适合用来处理表格类数据。


五、综合实战:成绩统计小程序

# -*- coding: utf-8 -*-

# 学生成绩表(字典列表)

students = [
    {"姓名": "小明", "语文": 85, "数学": 92, "英语": 78},
    {"姓名": "小红", "语文": 90, "数学": 88, "英语": 95},
    {"姓名": "小刚", "语文": 72, "数学": 95, "英语": 81},
    {"姓名": "小丽", "语文": 88, "数学": 76, "英语": 89},
]

print
("=" * 30)
print
("学生成绩统计表")
print
("=" * 30)

for
 student in students:
    name = student["姓名"]
    chinese = student["语文"]
    math = student["数学"]
    english = student["英语"]
    total = chinese + math + english
    average = total / 3

    print
(f"\n姓名:{name}")
    print
(f"  语文:{chinese}分")
    print
(f"  数学:{math}分")
    print
(f"  英语:{english}分")
    print
(f"  总分:{total}分,平均:{average:.1f}分")

运行结果:

==============================
学生成绩统计表
==============================

姓名:小明
  语文:85分
  数学:92分
  英语:78分
  总分:255分,平均:85.0分

姓名:小红
  语文:90分
  数学:88分
  英语:95分
  总分:273分,平均:91.0分

姓名:小刚
  语文:72分
  数学:95分
  英语:81分
  总分:248分,平均:82.7分

姓名:小丽
  语文:88分
  数学:76分
  英语:89分
  总分:253分,平均:84.3分

六、这篇我们学到了什么

核心知识点回顾:

  • • 列表用 [] 表示,适合存储有序数据,元素用逗号分隔
  • • 列表索引从 0 开始,负数索引表示从右边数
  • • 列表切片 list[start:end] 可以截取子列表
  • • 字典用 {} 表示,每个元素是键值对,用键(key)访问值(value)
  • • 字典的 get(key, default) 方法在键不存在时返回默认值而不是报错
  • • for...in 循环可以遍历列表和字典
  • • 列表和字典可以互相嵌套,形成复杂的数据结构

代码示例汇总:

# -*- coding: utf-8 -*-

# 列表的创建和访问

fruits = ["苹果", "香蕉", "橙子", "葡萄"]
print
(fruits[0])     # 苹果
print
(fruits[-1])    # 葡萄

# 列表的增删改

fruits.append("草莓")      # 末尾添加
fruits.insert(1, "桃子")   # 指定位置插入
fruits[0] = "西瓜"          # 修改元素
removed = fruits.pop()     # 弹出末尾元素

# 列表切片

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print
(numbers[2:6])   # [2, 3, 4, 5]
print
(numbers[::2])    # [0, 2, 4, 6, 8]

# 遍历列表

for
 fruit in fruits:
    print
(fruit)

# 字典的创建和访问

student = {"姓名": "张三", "年龄": 19, "班级": "计算机1班"}
print
(student["姓名"])
print
(student.get("电话", "暂无"))  # 暂无

# 字典遍历

for
 key, value in student.items():
    print
(f"{key}:{value}")

# 列表套字典

students = [
    {"姓名": "张三", "分数": 88},
    {"姓名": "李四", "分数": 95},
]
for
 s in students:
    print
(f"{s['姓名']}的分数是{s['分数']}")

下篇预告:函数入门——把代码打包成工具。这是Python编程的核心技能之一,学会函数就能写出结构清晰、可复用的代码。

                 

最新文章

随机文章