国际访客建议访问 Primers 编程伙伴 国际版站点 > Python 教程 > 切片操作 以获得更好的体验。

# Python 的切片操作

切片是对元组和列表中部分元素创建的视图,有以下写法:

tuple_or_list[:]                    # 所有元素的切片
tuple_or_list[start:]               # 从 索引start 到 最后一个元素 的切片
tuple_or_list[:stop]                # 从 索引0 到 索引stop 的切片,不含 索引stop
tuple_or_list[start:stop]           # 从 索引start 到 索引stop 的切片,不含 索引stop
tuple_or_list[start:stop:step]      # 从 索引start 到 索引stop 的切片,不含 索引stop,步长为 step
digraph {
    node [shape=plaintext, fontcolor=red, fontsize=18];
    "array" -> "array[3:7]" [color=white];

    node [shape=record, fontcolor=black, fontsize=14, width=4.75, fixedsize=true];
    values [label="<f0> 0 | <f1> 1 | <f2> 2 | <f3> 3 | <f4> 4 | <f5> 5 | <f6> 6 | <f7> 7 | <f8> 8 | <f9> 9", color=blue, fillcolor=lightblue, style=filled];
    slice [label="<f3> 3 | <f4> 4 | <f5> 5 | <f6> 6 ", color=blue, fillcolor=lightblue, style=filled];

    { rank=same; "array"; values }
    { rank=same; "array[3:7]"; slice }

    edge [color=blue];
    values:f3 -> slice:f3 [label="start"];
    values:f6 -> slice:f6 [label="end-1"];
}

例如:

运行示例

numbers:list[int] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(numbers[:])
print(numbers[5:])
print(numbers[:3])
print(numbers[1:4])
print(numbers[2:7:3])

# 修改源列表

切片是对源列表的引用,因此修改切片的元素等同于修改源列表的元素:

运行示例

numbers:list[int] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
numbers[2:7] = [233]    # 将 索引2 到 索引7,不含 索引7 替换为 [233]
print(numbers)

元组是不可变类型,因此不能通过切片进行修改。

# 字符串切片

字符串也支持切片操作:

运行示例

text:str = "hello world"
print(text[4:7])

字符串是不可变类型,因此不能通过切片进行修改。

# 切片拷贝

如果将切片赋值给一个变量,该变量会基于此切片创建新的实体,而不是引用源列表:

运行示例

numbers:list[int] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
shadow:list[int] = numbers[2:7]     # 将 索引2 到 索引7,不含 索引7 赋值给变量 shadow,将创建新的列表
shadow[1] = 233                     # 修改 shadow 元素的值,不会影响 numbers
print(shadow)
print(numbers)

因此可以通过切片简化列表的复制操作:

numbers:list[int] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
shadow:list[int] = numbers[:]       # 复制 numbers
# shadow:list[int] = list(numbers)  # 等价
本文 更新于: 2025-06-19 01:15:24 创建于: 2025-06-19 01:15:24