1、负数索引记忆:
- 想象一个数轴
- 右边是 -1(最后一个)
- 往左依次是 -2, -3, -4 ...
2、负数步长记忆:
- 正数步长:→ 从左往右走
- 负数步长:← 从右往左走
- 步长的绝对值表示每次跳几个位置
总结:负号在切片中表示"反向"的概念,无论是用在索引位置(表示从后往前数)还是用在步长上(表示从右往左取)。
"""
Python切片操作详解
语法:[起始位置:结束位置:步长]
规律:左闭右开 [包含起始位置:不包含结束位置]
"""
# 1. 创建一个示例列表
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print("原始列表:", numbers)
print("-" * 50)
# 2. 基础切片操作 [起始位置:结束位置]
print("基础切片示例:")
print("前3个元素 numbers[:3] =", numbers[:3]) # 从开头取到索引3(不包含3)
print("后3个元素 numbers[-3:] =", numbers[-3:]) # 从倒数第3个取到末尾
print("中间部分 numbers[3:7] =", numbers[3:7]) # 从索引3取到索引7(不包含7)
print("-" * 50)
# 3. 步长切片 [起始位置:结束位置:步长]
print("步长切片示例:")
print("所有偶数索引 numbers[::2] =", numbers[::2]) # 从头到尾,步长为2
print("所有奇数索引 numbers[1::2] =", numbers[1::2]) # 从索引1开始,步长为2
print("-" * 50)
# 4. 负数索引和反向切片详解
print("\n负数索引和反向切片详解:")
print("原始列表:", numbers)
print("负数索引示意图:")
print(" 0 1 2 3 4 5 6 7 8 9 (正向索引)")
print("[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]")
print("-10 -9 -8 -7 -6 -5 -4 -3 -2 -1 (负向索引)")
# 4.1 使用负数索引
print("\n使用负数索引示例:")
print("最后一个元素 numbers[-1] =", numbers[-1]) # 输出:9
print("倒数第二个元素 numbers[-2] =", numbers[-2]) # 输出:8
print("后三个元素 numbers[-3:] =", numbers[-3:]) # 输出:[7,8,9]
# 4.2 反向切片详解
print("\n反向切片示例:")
# 步长为-1,表示从右向左每次移动1个位置
print("完整反转 numbers[::-1] =", numbers[::-1]) # 从后向前取所有元素
print("反向取后三个 numbers[-1:-4:-1] =", numbers[-1:-4:-1]) # 从-1开始向左取3个
print("反向间隔取 numbers[::-2] =", numbers[::-2]) # 从后向前每隔一个取
# 4.3 反向切片的理解方式
print("\n反向切片理解方式:")
print("1. numbers[::-1] 理解为:")
print(" - 从右往左")
print(" - 每次移动1步")
print(" - 取所有元素")
print("\n2. numbers[::-2] 理解为:")
print(" - 从右往左")
print(" - 每次移动2步")
print(" - 取所有元素")
print("\n3. numbers[-1:-4:-1] 理解为:")
print(" - 从索引-1(最后一个)开始")
print(" - 到索引-4(倒数第4个)结束(不包含)")
print(" - 每次向左移动1步")
# 5. 字符串切片(字符串也可以使用切片)
text = "Python切片操作"
print("字符串切片示例:")
print("原始字符串:", text)
print("前3个字符:", text[:3]) # 取前3个字符
print("反转字符串:", text[::-1]) # 反转字符串
print("-" * 50)
# 6. 切片做拷贝
print("切片拷贝示例:")
list_copy = numbers[:] # 创建列表的完整拷贝
list_copy[0] = 999 # 修改拷贝不影响原列表
print("原列表:", numbers)
print("拷贝后修改的列表:", list_copy)
"""
快速记忆方法:
1. 基础切片 [a:b]
- 空着的位置代表最大范围(开头或结尾)
- 取值范围是 [a,b),包含a不包含b
- 常用组合:
[:3] = 前3个
[-3:] = 后3个
[:] = 全部
2. 步长切片 [a:b:c]
- c为步长,表示每次跳几个取一个
- 常用组合:
[::2] = 所有偶数索引
[1::2] = 所有奇数索引
[::-1] = 反转
3. 负数索引规律:
- 负数表示从后往前数
- -1 表示最后一个元素
- -2 表示倒数第二个元素
- 以此类推
4. 反向切片规律:
- 负步长表示从右向左取值
- [::-1] = 完整反转
- [::-2] = 反向间隔取
- [-1:-4:-1] = 反向取特定范围
5. 位置记忆口诀:
- 左边空着就是从头开始
- 右边空着就是到尾结束
- 步长为正从左向右取
- 步长为负从右向左取
"""
打印如下:
原始列表: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
--------------------------------------------------
基础切片示例:
前3个元素 numbers[:3] = [0, 1, 2]
后3个元素 numbers[-3:] = [7, 8, 9]
中间部分 numbers[3:7] = [3, 4, 5, 6]
--------------------------------------------------
步长切片示例:
所有偶数索引 numbers[::2] = [0, 2, 4, 6, 8]
所有奇数索引 numbers[1::2] = [1, 3, 5, 7, 9]
--------------------------------------------------
负数索引和反向切片详解:
原始列表: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
负数索引示意图:
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 (负向索引)
使用负数索引示例:
最后一个元素 numbers[-1] = 9
倒数第二个元素 numbers[-2] = 8
后三个元素 numbers[-3:] = [7, 8, 9]
反向切片示例:
完整反转 numbers[::-1] = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
反向取后三个 numbers[-1:-4:-1] = [9, 8, 7]
反向间隔取 numbers[::-2] = [9, 7, 5, 3, 1]
反向切片理解方式:
1. numbers[::-1] 理解为:
- 从右往左
- 每次移动1步
- 取所有元素
2. numbers[::-2] 理解为:
- 从右往左
- 每次移动2步
- 取所有元素
3. numbers[-1:-4:-1] 理解为:
- 从索引-1(最后一个)开始
- 到索引-4(倒数第4个)结束(不包含)
- 每次向左移动1步
字符串切片示例:
原始字符串: Python切片操作
前3个字符: Pyt
反转字符串: 作操片切nohtyP
--------------------------------------------------
切片拷贝示例:
原列表: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
拷贝后修改的列表: [999, 1, 2, 3, 4, 5, 6, 7, 8, 9]