当前位置: 首页 > news >正文

Python中数据切片操作详解和代码示例

在 Python 中,数据切片(slicing)是一个强大且常用的操作,尤其在列表、元组、字符串和其他序列类型(如 rangenumpy 数组等)中。切片允许你从序列中获取一个子集而不修改原始数据。

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
  • 切片与步长:步长可以是负数,支持反向遍历。
  • 切片的应用:不仅适用于列表、字符串、元组等基本序列,还适用于 rangenumpy 数组。
http://www.xdnf.cn/news/181441.html

相关文章:

  • AI实战SEO关键词优化法
  • 【视频生成模型】通义万相Wan2.1模型本地部署和LoRA微调
  • 初中级前端面试全攻略:自我介绍模板、项目讲解套路与常见问答
  • LeetCode42_接雨水
  • 杭电oj(1010、1015、1241)题解
  • 【数据可视化-39】2009-2019年亚马逊50大畅销书数据集可视化分析
  • 迷你世界UGC3.0脚本Wiki世界模块管理接口 World
  • Mysql中隐式内连接和显式内连接的区别
  • (26)VTK C++开发示例 ---将点坐标写入PLY文件
  • linux:进程的替换
  • 大模型时代具身智能:从理论突破到产业落地的全链路解析
  • 自动伴随无人机说明文档
  • Netmiko 源码关键流程图
  • pytorch学习使用
  • 深入解析MyBatis-Plus中的lambdaUpdate与lambdaQuery
  • OpenCV 图形API(65)图像结构分析和形状描述符------拟合二维点集的直线函数 fitLine2D()
  • 文章记单词 | 第47篇(六级)
  • java map中的key区分大小写吗
  • ChatGPT与DeepSeek在科研论文撰写中的整体科研流程与案例解析
  • 【git】添加项目到已有gitee仓库
  • vue组件间通信
  • 蓝桥杯 9.生命之树
  • 【Multipath】dm软链接相关问题定位
  • 前端高频面试题day3
  • Python装饰器:函数增强的秘密武器
  • 使用ZXing开发安卓扫码功能
  • 【C++】C++11新特性(一)
  • 【前端】element表格X轴滚动优化拖拽滚动
  • 函数式编程之 Optional
  • 海底世界-第16届蓝桥第4次STEMA测评Scratch真题第5题