手记

Python 的内置函数 slice

Python 的内置函数 slice() 用于创建一个切片对象,主要用于序列(如字符串、列表、元组等)的分片操作。该函数可以替代直接使用切片语法(如 [start:stop:step]),特别适用于需要在运行时动态生成切片参数的情况。

函数签名

slice(stop)
slice(start, stop[, step])

参数说明

  1. start(可选):切片的起始索引(包含),默认为 0
  2. stop:切片的结束索引(不包含),必须指定。
  3. step(可选):切片的步长,默认为 1。可以是负数,表示反向切片。

返回值

返回一个切片对象(slice 类型),可以直接用于序列的分片操作。

示例用法

基本用法

# 创建一个切片对象,相当于 [2:5]
s = slice(2, 5)
lst = [0, 1, 2, 3, 4, 5, 6]
print(lst[s])  # 输出 [2, 3, 4]

指定步长

# 创建一个切片对象,相当于 [1:6:2]
s = slice(1, 6, 2)
lst = [0, 1, 2, 3, 4, 5, 6]
print(lst[s])  # 输出 [1, 3, 5]

省略 start 或 step

# 省略 start,相当于 [:5]
s = slice(5)
lst = [0, 1, 2, 3, 4, 5, 6]
print(lst[s])  # 输出 [0, 1, 2, 3, 4]

# 省略 step,相当于 [2:5]
s = slice(2, 5)
print(lst[s])  # 输出 [2, 3, 4]

反向切片

# 创建一个反向切片对象,相当于 [5:2:-1]
s = slice(5, 2, -1)
lst = [0, 1, 2, 3, 4, 5, 6]
print(lst[s])  # 输出 [5, 4, 3]

动态生成切片

slice() 特别适合在运行时动态生成切片参数的情况。例如:

def dynamic_slice(sequence, start=None, stop=None, step=None):
    s = slice(start, stop, step)
    return sequence[s]

lst = [0, 1, 2, 3, 4, 5, 6]
print(dynamic_slice(lst, 1, 5, 2))  # 输出 [1, 3]

切片对象的属性

切片对象有三个只读属性:

  • start:切片的起始索引。
  • stop:切片的结束索引。
  • step:切片的步长。
s = slice(1, 5, 2)
print(s.start)  # 输出 1
print(s.stop)   # 输出 5
print(s.step)   # 输出 2

应用场景

  1. 动态分片:当切片的参数需要在运行时计算时,使用 slice() 可以更灵活地生成切片对象。
  2. 函数封装:在封装分片操作的函数时,slice() 可以作为参数传递。
  3. 代码复用:如果需要多次使用相同的切片操作,可以创建一个切片对象复用。

注意事项

  • 如果 startstopstepNone,则切片对象对应的属性也为 None,在分片操作时会使用默认值。
  • 切片对象的参数可以是负数,与直接使用切片语法时的行为一致。

通过 slice() 函数,可以更灵活地控制序列的分片操作,特别适合需要动态生成切片参数的场景。

0人推荐
随时随地看视频
慕课网APP