16 搞定切片操作

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]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值