课程重点 · 7 分钟阅读

Python 列表练习:索引、切片与排序

列表是大多数初学者最早使用的数据结构,也是小错误的集中地。这组练习聚焦索引、切片、原地修改,以及 sort 和 sorted 的区别。

索引与切片

第一个元素在索引 0。负索引从末尾开始。切片 start:stop 包含 start、不包含 stop。如果只记一条规则,就记住结束索引不包含在结果里。

orders = ["拿铁", "摩卡", "茶"]
print(orders[0])
print(orders[-1])
print(orders[0:2])

读取列表

有意识地修改列表

append 添加一个元素;remove 删除第一个匹配值;pop 按索引删除。这些方法会原地修改列表。切片会创建新列表,所以修改切片不会影响原列表。

orders = ["拿铁", "摩卡"]
orders.append("茶")
orders.remove("摩卡")
print(orders)

原地修改

排序、求和与 None 陷阱

sort() 返回 None,所以不要把它的结果赋回列表。sorted() 返回新的排序列表。sum 和 len 可以快速汇总。每加一步操作前,先 print 检查结果。

prices = [6.0, 4.5, 3.25]
prices.sort()
print(prices)
print(sum(prices))
print(sorted(prices, reverse=True))

排序与汇总

练习:修改前先复制

prices[:] 会创建浅拷贝。想排序或修改工作副本、又不想丢掉原顺序时,先复制。这样比排序唯一一份列表、再想办法恢复原顺序更容易推理。

prices = [6.0, 4.5, 3.25]
original = prices[:]
prices.sort()
print("排序后", prices)
print("原列表", original)

工作副本与原列表

你的练习清单

常见问题

append 和 extend 有什么区别?

append 添加一个元素,即使这个元素本身是列表;extend 会把可迭代对象中的每个元素分别加进去。

为什么排序后列表变成 None?

你可能写了 items = items.sort()。sort() 原地排序并返回 None;单独调用 items.sort(),或者用 items = sorted(items)。

怎样取得最后一个元素?

用 items[-1]。负索引从末尾开始,-1 就是最后一个元素。

练习列表

12 道题,覆盖索引、切片、排序和求和。

打开练习

继续阅读: