公众号推文 | 预计阅读时间:5 分钟
一、什么是列表索引?
列表(List)是 Python 中最常用的数据结构之一。索引就是用来定位列表中元素位置的"门牌号"。
fruits = ['苹果', '香蕉', '橙子', '葡萄', '西瓜']
# 正向索引(从左往右,从 0 开始)
print(fruits[0]) # 苹果
print(fruits[2]) # 橙子
🔑 核心规则:Python 索引从 0 开始
# 反向索引(从右往左,从 -1 开始)
print(fruits[-1]) # 西瓜(最后一个)
print(fruits[-2]) # 葡萄(倒数第二个)
二、什么是切片?
切片(Slicing) 是 Python 的强大特性,可以一次性取出列表中的一段元素,返回一个新的列表。
基本语法
列表[start:end:step]
三、切片实战演示
1. 基础切片
nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 取前 3 个元素
print(nums[0:3]) # [0, 1, 2]
print(nums[:3]) # 同上(start 省略,默认从 0 开始)
# 取第 3 到第 6 个元素(索引 3,4,5)
print(nums[3:6]) # [3, 4, 5]
# 取后 3 个元素
print(nums[-3:]) # [7, 8, 9](end 省略,默认到末尾)
2. 进阶技巧
# 复制整个列表
print(nums[:]) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 每隔一个取一个(步长为 2)
print(nums[::2]) # [0, 2, 4, 6, 8]
# 反转列表(经典写法!)
print(nums[::-1]) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
# 取倒数第 3 到倒数第 1 个(不包括最后一个)
print(nums[-3:-1]) # [7, 8]
四、切片的重要特性
✅ 特性 1:左闭右开区间
nums = [0, 1, 2, 3, 4]
print(nums[1:3]) # [1, 2] ← 包含索引 1,不包含索引 3
记忆口诀:"前包后不包"
✅ 特性 2:越界不报错
nums = [0, 1, 2]
print(nums[0:100]) # [0, 1, 2] ← 不会报错,自动截断
✅ 特性 3:返回新列表
original = [1, 2, 3]
new = original[:]
new[0] = 999
print(original) # [1, 2, 3] ← 原列表不变
print(new) # [999, 2, 3]
五、常见面试题/实用场景
📝 场景 1:字符串反转
s = "Python"
print(s[::-1]) # "nohtyP"
📝 场景 2:删除列表最后 N 个元素
nums = [1, 2, 3, 4, 5]
nums = nums[:-2] # 删除最后 2 个
print(nums) # [1, 2, 3]
📝 场景 3:二维列表取值
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 取第二行
print(matrix[1]) # [4, 5, 6]
# 取第二行第三列
print(matrix[1][2]) # 6
六、易错点总结
| | |
|---|
list[3] | | list[2] |
list[1:3] | | list[1:4] |
list[3:1] | | list[1:3] |
list[::0] | | list[::1] |
七、一张图看懂切片
列表: [ 0 1 2 3 4 5 6 7 8 9 ]
索引: 0 1 2 3 4 5 6 7 8 9
-10 -9 -8 -7 -6 -5 -4 -3 -2 -1
nums[2:5] → [2, 3, 4] (从 2 开始到 5 之前)
nums[:4] → [0, 1, 2, 3] (从头开始到 4 之前)
nums[6:] → [6, 7, 8, 9] (从 6 开始到末尾)
nums[::2] → [0, 2, 4, 6, 8] (每隔一个)
nums[::-1] → [9, 8, 7, ..., 0] (反转)
八、总结
| | |
|---|
| list[i] | |
| list[start:end] | |
| list[::step] | |
| list[::-1] | |
| list[:] | |
💡 小贴士:切片不仅适用于列表,对字符串、元组同样有效!掌握切片,Python 代码效率翻倍~
觉得有用?点赞 👍 在看 👀 转发 ↗️