第 6 课 / 共 9 课16 分钟2 个闯关

列表与字典:装一堆东西

下标从 0 开始、切片左闭右开、字典用名字取值。

列表:一排带编号的格子

一个变量只能装一个东西。要装一堆,用列表(list):

scores = [88, 92, 79]
names = ["小明", "小红"]
mixed = [1, "二", 3.0, True]     # 允许混装,但通常别这么干

下标取值,从 0 开始数

print(scores[0])    # 88   第一个
print(scores[2])    # 79   第三个
print(scores[-1])   # 79   倒数第一个,负数从右边数
print(len(scores))  # 3    一共几个

下标从 0 开始意味着最后一个元素的下标是 len - 1。写 scores[3] 会报 IndexError: list index out of range——越界了。

增删改查

scores = [88, 92, 79]

scores.append(100)      # 末尾追加 → [88, 92, 79, 100]
scores[0] = 90          # 改第一个 → [90, 92, 79, 100]
scores.remove(79)       # 删掉值为 79 的第一个 → [90, 92, 100]
del scores[0]           # 按下标删 → [92, 100]
print(92 in scores)     # True,判断存不存在

常用统计:

nums = [3, 1, 4, 1, 5]
print(sum(nums))      # 14
print(max(nums))      # 5
print(min(nums))      # 1
print(sorted(nums))   # [1, 1, 3, 4, 5],返回新列表,原列表不变

切片:取一段

nums = [0, 1, 2, 3, 4, 5]
print(nums[1:4])    # [1, 2, 3]   还是左闭右开
print(nums[:3])     # [0, 1, 2]   从头开始
print(nums[3:])     # [3, 4, 5]   一直到尾

字典:用名字取值,不用编号

列表适合"一排同类的东西"。但要描述一个东西的多个属性,用编号就很难受了——你记不住 user[2] 是什么。这时候用字典(dict):

user = {
    "name": "小明",
    "age": 18,
    "city": "杭州"
}

print(user["name"])    # 小明
user["age"] = 19       # 改
user["email"] = "a@b.c"  # 加(键不存在就是新增)

字典是一堆 键: 值 对。键通常用字符串,值什么都行。

取一个不存在的键会报 KeyError。想安全一点用 get

print(user.get("phone"))          # None,不报错
print(user.get("phone", "未填"))   # 未填,可以给默认值

遍历它们

for score in scores:
    print(score)

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

for i, name in enumerate(names):     # 同时要下标和值
    print(f"第{i + 1}名是{name}")

列表套字典:真实数据长这样

students = [
    {"name": "小明", "score": 88},
    {"name": "小红", "score": 95},
]

for s in students:
    print(f'{s["name"]} 考了 {s["score"]} 分')

你从网络接口、数据库拿到的数据,基本都是这个形状。看懂它,你就能读懂大部分真实代码。

10 秒自测

a = [1, 2, 3]
print(a[1:])

答案是 [2, 3]。从下标 1 开始到结尾。

广告位(未配置 AdSense,上线后在此展示)

动手闯关

读懂了不算会,写出来才算

0/2 已通过

闯关和判题完全免费,交错了不扣任何东西。卡住随时点「问 AI」,它能看到你正在写的代码。

关卡 01猜输出+10 点 · +15 XP

切片取哪一段

输出是什么? ```python a = [1, 2, 3] print(a[1:]) ```

  • 可能是多选,选错不扣点数,随便试。
登录后闯关拿点数
关卡 02写代码+20 点 · +30 XP

统计每个分类花了多少钱

已经给你一个 bills 列表。请按分类统计总额,并按**分类名**排序后逐行输出,格式为 `分类:总额`(总额保留一位小数)。 期望输出: ``` 交通:8.0 吃饭:37.5 ```

示例输入

(无)

应该输出

交通:8.0
吃饭:37.5
pythonTab 缩进 4 空格

学完了?标记一下

标记完成会记进度、涨 20 XP,还会点亮连续学习天数。