Python for AI

模块 1 - Python 基础 · 第 06 课

索引、切片与容器操作

统一理解序列索引、半开区间切片、成员测试和可变容器操作。

学习目标

  • 在字符串、列表和元组上使用索引与切片;
  • 理解 start:stop:step 的半开区间规则;
  • 区分修改原容器的方法和返回新值的操作。

统一的序列规则

values = [10, 20, 30, 40, 50]
print(values[0])
print(values[-1])
print(values[1:4])
print(values[::2])

values[1:4] 取索引 1、2、3;停止位置 4 不包含在结果中。步长默认为 1,::2 表示每隔一个元素取一个。

字符串和元组也遵循同一规则,但它们不可变:

shape = (32, 3, 224, 224)
channels = shape[1]
spatial = shape[2:]

成员测试与安全边界

allowed = {"cpu", "cuda"}
device = "cpu"
if device in allowed:
    print("device accepted")

用 in 表达成员关系比手写多个 or 更清楚。访问序列前先确认长度,或使用切片,因为空切片不会抛出越界错误。

原地修改与新容器

items = ["train", "valid"]
items.append("test")
recent = items[-2:]
print(items)
print(recent)

append() 修改原列表并返回 None;切片创建一个新的列表。需要独立副本时使用 items.copy(),避免两个名字意外指向同一个列表。

AI 场景:批次切片

下面使用 range 生成示例 ID,是 Preview;range 的完整规则会在 Module 2 讲解。

sample_ids = list(range(100, 110))
train_ids = sample_ids[:8]
valid_ids = sample_ids[8:]
print(len(train_ids), len(valid_ids))

切片适合表达简单的连续分割。真实数据集还需要随机打乱和防止泄漏,这些会在 NumPy 与数据加载部分再次出现。

练习

★ 基础

从一个十元素列表取出前四个、最后三个和倒序列表。

★★ 应用

用 in 检查一个模型配置是否包含 "dropout" 键。

★★★ 综合

不修改原列表,把样本 ID 按 70%/30% 切成训练与验证两部分,并验证长度之和正确。

一种可能的实现 ```python sample_ids = list(range(10)) # Preview:range 会在 Module 2 正式讲解 split = int(len(sample_ids) * 0.7) train = sample_ids[:split] valid = sample_ids[split:] assert len(train) + len(valid) == len(sample_ids) ```

小结与 D2L 衔接

索引定位一个元素,切片选择一个半开区间,in 检查成员关系;列表可原地修改,字符串和元组不可变。理解这些边界后,阅读批次、标签和张量切片会容易很多。下一模块将把容器操作放进 if、for 和函数中。

第 06 课 学习进度仅保存在当前浏览器。