Python中数据切片操作详解和代码示例
在 Python 中,数据切片(slicing)是一个强大且常用的操作,尤其在列表、元组、字符串和其他序列类型(如 range
、numpy
数组等)中。切片允许你从序列中获取一个子集而不修改原始数据。
1. 切片语法
切片的基本语法格式是:
sequence[start:stop:step]
start
: 切片的开始索引,包含该位置的元素。如果省略,默认从 0 开始。stop
: 切片的结束索引,不包含该位置的元素。如果省略,默认到序列的末尾。step
: 步长,指定步进的大小。如果省略,默认为 1。
2. 基本用法
列表切片
# 示例列表
my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]# 从索引2到索引5(不包括5)的子列表
sub_list = my_list[2:5]
print(sub_list) # 输出 [2, 3, 4]# 从头到索引5(不包括5)的子列表
sub_list = my_list[:5]
print(sub_list) # 输出 [0, 1, 2, 3, 4]# 从索引5到结尾的子列表
sub_list = my_list[5:]
print(sub_list) # 输出 [5, 6, 7, 8, 9]# 复制整个列表
sub_list = my_list[:]
print(sub_list) # 输出 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
使用步长
# 步长为2,获取每隔一个元素的子列表
sub_list = my_list[::2]
print(sub_list) # 输出 [0, 2, 4, 6, 8]# 步长为-1,获取反向的子列表
sub_list = my_list[::-1]
print(sub_list) # 输出 [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
修改切片
# 修改列表中的一部分
my_list[2:5] = [10, 11, 12]
print(my_list) # 输出 [0, 1, 10, 11, 12, 5, 6, 7, 8, 9]
切片赋值
# 用新的子序列替换原有序列
my_list[1:4] = [20, 21, 22]
print(my_list) # 输出 [0, 20, 21, 22, 12, 5, 6, 7, 8, 9]
3. 字符串切片
字符串在 Python 中是不可变的,但它也支持切片操作:
# 示例字符串
my_str = "Hello, World!"# 从索引7到索引12(不包括12)的子串
sub_str = my_str[7:12]
print(sub_str) # 输出 'World'# 步长为2,获取每隔一个字符的子串
sub_str = my_str[::2]
print(sub_str) # 输出 'Hoo ol!'
4. 元组切片
元组是不可变的,但也支持切片操作:
# 示例元组
my_tuple = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)# 获取从索引2到索引5(不包括5)的子元组
sub_tuple = my_tuple[2:5]
print(sub_tuple) # 输出 (2, 3, 4)
5. 切片与 range
range
对象也支持切片:
# 示例 range 对象
my_range = range(10)# 获取从索引2到索引5(不包括5)的切片
sub_range = my_range[2:5]
print(list(sub_range)) # 输出 [2, 3, 4]
6. 多维数组切片(例如 numpy
数组)
如果你使用 numpy
库,切片更为强大,可以应用于多维数组:
import numpy as np# 创建 3x3 的数组
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 获取第1行到第2行的子数组(不包括第2行)
sub_arr = arr[0:2, :]
print(sub_arr)
# 输出:
# [[1 2 3]
# [4 5 6]]# 获取第1列到第2列的子数组(不包括第2列)
sub_arr = arr[:, 0:2]
print(sub_arr)
# 输出:
# [[1 2]
# [4 5]
# [7 8]]
7. 切片中的负索引
负数索引可以从序列的末尾开始访问元素。例如,-1
代表最后一个元素,-2
代表倒数第二个元素,等等。
# 获取最后一个元素
last_element = my_list[-1]
print(last_element) # 输出 9# 获取倒数前3个元素
last_three = my_list[-3:]
print(last_three) # 输出 [7, 8, 9]# 获取从倒数第4个元素到倒数第2个元素
sub_list = my_list[-4:-2]
print(sub_list) # 输出 [6, 7]
小结
- 切片基本操作:
start:stop:step
- 切片与步长:步长可以是负数,支持反向遍历。
- 切片的应用:不仅适用于列表、字符串、元组等基本序列,还适用于
range
和numpy
数组。