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)工作副本与原列表
你的练习清单
- 记住索引从 0 开始。
- 切片的结束索引不包含。
- append 修改列表并返回 None。
- 需要保留原顺序时使用 sorted() 或先复制。
常见问题
append 和 extend 有什么区别?
append 添加一个元素,即使这个元素本身是列表;extend 会把可迭代对象中的每个元素分别加进去。
为什么排序后列表变成 None?
你可能写了 items = items.sort()。sort() 原地排序并返回 None;单独调用 items.sort(),或者用 items = sorted(items)。
怎样取得最后一个元素?
用 items[-1]。负索引从末尾开始,-1 就是最后一个元素。
练习列表
12 道题,覆盖索引、切片、排序和求和。
继续阅读: