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

Python 切片语法基础:[start:end:step] 全解

文章目录

    • 前言
    • 一、先搞懂:Python 切片到底是什么?
    • 二、基础切片:只写 start 和 end
      • 2.1 最基础:从 start 切到 end
      • 2.2 省略 start:从头开始切
      • 2.3 省略 end:切到末尾
      • 2.4 全都省略:复制整个序列
    • 三、负数索引:从右边数,超级好用
      • 3.1 取最后 n 个元素
      • 3.2 去掉最后 n 个元素
      • 3.3 中间一段用负数
    • 四、步长 step:跳跃式切片,真正的骚操作
      • 4.1 正步长:从左往右跳
      • 4.2 步长为 -1:**直接倒序**
      • 4.3 步长为负:从右往左切
    • 五、切片常见组合:工作中高频场景
      • 5.1 取前 n 个元素
      • 5.2 取后 n 个元素
      • 5.3 去掉前 k 个,取后面所有
      • 5.4 去掉后 k 个,取前面所有
      • 5.5 列表浅拷贝
      • 5.6 奇偶下标分离
      • 5.7 字符串按步长采样
      • 5.8 深度学习中常用:批量取前N条数据
    • 六、必踩的 5 个坑,99% 新手都中招
      • 坑1:end 不包含自身,永远记不住
      • 坑2:start > end 且 step 为正 → 空列表
      • 坑3:负数步长时,start < end → 空
      • 坑4:切片越界不会报错
      • 坑5:切片是新对象,不是原序列
    • 七、进阶:切片对象 slice(),代码更优雅
    • 八、实战案例:用切片简化真实业务代码
      • 案例1:取列表前5个,倒序输出
      • 案例2:字符串去除首尾各2个字符,再反转
      • 案例3:AI数据集按步长采样,减少计算量
    • 九、2026 年最新 Python 切片规范与技巧
    • 十、总结:一张表记住 [start:end:step] 所有规则

P.S. 目前国内还是很缺AI人才的,希望更多人能真正加入到AI行业,共同促进行业进步,增强我国的AI竞争力。想要系统学习AI知识的朋友可以看看我精心打磨的教程 http://blog.csdn.net/jiangjunshow,教程通俗易懂,高中生都能看懂,还有各种段子风趣幽默,从深度学习基础原理到各领域实战应用都有讲解,我22年的AI积累全在里面了。注意,教程仅限真正想入门AI的朋友,否则看看零散的博文就够了。

前言

很多刚学Python的朋友,一上来就被[start:end:step]这套切片语法搞得头大。
看着简单三个参数,组合起来花样百出,正数、负数、空着不写、倒序、步长跳跃……
明明一行代码能搞定的事,硬是写出了阅读理解的感觉。

我见过太多新手,循环写了几十行,只为取列表前几个元素、倒序输出、隔一个取一个。
殊不知Python切片一出,这些操作全是一行秒杀

2026年了,Python早已是AI、数据分析、后端开发的绝对主力语言,切片更是日常编码里出场率最高的语法之一。不管是处理数据集、字符串清洗、数组裁剪,还是深度学习里的张量维度截取,都离不开它。

今天这篇文章,我就用最通俗、最接地气的方式,把[start:end:step]从入门到精通彻底讲透。
不讲虚的,全是真实可跑的代码,全是工作里真能用得上的技巧,看完你再也不会被切片绕晕。

一、先搞懂:Python 切片到底是什么?

一句话:
切片就是从序列(列表、字符串、元组、range、张量等)里,按规则「抠出一段子序列」的语法。

Python里所有可迭代、有序、支持下标访问的对象,基本都支持切片:

  • list 列表
  • str 字符串
  • tuple 元组
  • bytes / bytearray
  • numpy array
  • torch tensor(深度学习常用)

它的标准语法只有一种,死记这一个模板就行:

序列[start:end:step]

三个参数含义极简版:

  • start:从哪里开始切(包含)
  • end:切到哪里结束(不包含
  • step:步长,每隔几个取一个,可正可负

最关键的坑点:end 是开区间,不包含自身!
这是90%新手翻车的地方。

二、基础切片:只写 start 和 end

先从最简单的情况入手:只写[start:end],默认step=1,也就是挨个取

我们先定义一个测试列表,后面所有例子都用它,方便对照:

# 索引: 0 1 2 3 4 5 6 7 8nums=[10,20,30,40,50,60,70,80,90]

2.1 最基础:从 start 切到 end

# 从索引1开始,到索引4结束(不包含4)print(nums[1:4])# [20, 30, 40]

结果只有索引1、2、3,没有4,记住:左闭右开

2.2 省略 start:从头开始切

[:end]等价于[0:end]

print(nums[:5])# 从开头到索引5(不含)[10,20,30,40,50]

2.3 省略 end:切到末尾

[start:]切到最后一个元素,包含末尾

print(nums[3:])# 从索引3到最后 [40,50,60,70,80,90]

2.4 全都省略:复制整个序列

[:]是Python里浅拷贝列表最常用的写法

print(nums[:])# [10,20,30,40,50,60,70,80,90]

在AI数据处理里,data[:]经常用来复制一份数据,避免修改原数组。

三、负数索引:从右边数,超级好用

Python支持负数下标,这是切片灵活性的关键之一。
规则:

  • -1:最后一个元素
  • -2:倒数第二个
  • 以此类推

还是用上面的列表:

# 索引: 0 1 2 3 4 5 6 7 8# 负索引:-9 -8 -7 -6 -5 -4 -3 -2 -1nums=[10,20,30,40,50,60,70,80,90]

3.1 取最后 n 个元素

print(nums[-3:])# 最后3个 [70,80,90]

3.2 去掉最后 n 个元素

print(nums[:-2])# 去掉最后2个 [10,20,30,40,50,60,70]

3.3 中间一段用负数

print(nums[-5:-2])# 从-5到-2(不含)[50,60,70]

很多AI数据集处理、字符串截断,用负数索引一行搞定,比写len()计算清爽太多。

四、步长 step:跳跃式切片,真正的骚操作

step是切片的灵魂,默认是1,改成其他整数,就变成每隔step个取一个

格式:

[start:end:step]

4.1 正步长:从左往右跳

print(nums[::2])# 从头到尾,步长2:[10,30,50,70,90]print(nums[1::3])# 从1开始,步长3:[20,50,80]

在处理时序数据、特征采样时,::2降采样非常常用。

4.2 步长为 -1:直接倒序

这是Python最经典的技巧:

print(nums[::-1])# [90,80,70,60,50,40,30,20,10]

字符串反转同样一行:

s="abcdef"print(s[::-1])# "fedcba"

比写循环、用reverse()优雅太多,而且不修改原对象

4.3 步长为负:从右往左切

step<0时,start要大于end,否则返回空列表。

print(nums[6:1:-1])# 从6到1(不含),倒着取 [70,60,50,40,30]

你可以理解为:

  • step 正:左 → 右
  • step 负:右 → 左

五、切片常见组合:工作中高频场景

我把2026年实际编码里最常用的切片场景整理出来,直接背,直接用。

5.1 取前 n 个元素

nums[:n]

5.2 取后 n 个元素

nums[-n:]

5.3 去掉前 k 个,取后面所有

nums[k:]

5.4 去掉后 k 个,取前面所有

nums[:-k]

5.5 列表浅拷贝

new_nums=nums[:]

5.6 奇偶下标分离

even=nums[::2]# 偶数下标 0,2,4...odd=nums[1::2]# 奇数下标 1,3,5...

5.7 字符串按步长采样

s="ABCDEFGHIJK"print(s[::3])# "ADGJ"

5.8 深度学习中常用:批量取前N条数据

# 假设batch_data是模型输入数据batch=batch_data[:32]# 取前32条样本

这些都是AI工程、数据处理里天天写的代码,学会切片,代码直接精简一半。

六、必踩的 5 个坑,99% 新手都中招

坑1:end 不包含自身,永远记不住

nums[2:5]# 取 2,3,4,没有5

解决办法:想要到索引x,就写end=x+1

坑2:start > end 且 step 为正 → 空列表

print(nums[5:2])# []

不会报错,直接空,很容易埋bug。

坑3:负数步长时,start < end → 空

print(nums[2:6:-1])# []

倒着切,必须左边下标 > 右边下标。

坑4:切片越界不会报错

Python非常宽容:

print(nums[100:200])# []print(nums[:1000])# 全部输出

不会抛IndexError,这点和直接取下标不同。

坑5:切片是新对象,不是原序列

a=[1,2,3]b=a[:]b[0]=999print(a)# [1,2,3] 没变

切片是浅拷贝,这在数据处理里非常重要,避免误改原始数据。

七、进阶:切片对象 slice(),代码更优雅

除了直接写[::],Python还提供内置函数slice(start, end, step),适合复用切片规则

# 定义一个切片规则:从1到7,步长2s=slice(1,7,2)print(nums[s])# [20,40,60]

在工程代码里,把固定切片逻辑封装成slice对象,可读性暴增。
比如深度学习里固定裁剪特征:

crop_feature=slice(5,20)feat1=data1[crop_feature]feat2=data2[crop_feature]

八、实战案例:用切片简化真实业务代码

我给你看两段对比,你就知道切片有多香。

案例1:取列表前5个,倒序输出

不用切片:

nums=[1,2,3,4,5,6,7,8,9]temp=nums[:5]temp.reverse()print(temp)

用切片一行:

print(nums[:5][::-1])

案例2:字符串去除首尾各2个字符,再反转

s="ABCDEFGHIJK"# 切片版res=s[2:-2][::-1]print(res)

案例3:AI数据集按步长采样,减少计算量

# 时序数据,每5个点取1个data=torch.randn(1000)sample=data[::5]

代码少、速度快、可读性强,这就是Pythonic。

九、2026 年最新 Python 切片规范与技巧

根据2026年Python官方风格指南PEP 8以及AI工程实践,有几条最佳实践:

  1. 尽量省略多余的0
    • 推荐nums[:5],不写nums[0:5]
  2. 尽量用负数索引处理尾部
    • 推荐nums[-3:],不写nums[len(nums)-3:]
  3. 步长不要写太复杂
    • 多层嵌套切片尽量拆成两行,避免可读性爆炸
  4. 张量/数组优先用切片,少用循环
    • numpy、torch底层对切片做了极致优化,比Python循环快几十倍
  5. 函数参数里支持切片时,优先封装slice对象
    • 让接口更清晰,便于维护

十、总结:一张表记住 [start🔚step] 所有规则

写法含义
a[:]复制整个序列
a[n:]从n到末尾
a[:n]从头到n(不含)
a[n:-m]从n到倒数m(不含)
a[::k]从头到尾,步长k
a[::-1]倒序序列
a[n:m:k]从n到m,步长k
a[m:n:-1]倒着从m到n(m>n)

记住三句话:

  1. 左闭右开,end不含
  2. 负数从右数,-1是最后
  3. 步长正负定方向,负步长要倒着写

只要吃透这三点,Python切片对你来说就再也没有难题。

不管是日常开发、数据清洗,还是深度学习张量操作,切片都是你最顺手的工具之一。
2026年写Python,还在写循环取元素,真的有点跟不上时代了。

P.S. 目前国内还是很缺AI人才的,希望更多人能真正加入到AI行业,共同促进行业进步,增强我国的AI竞争力。想要系统学习AI知识的朋友可以看看我精心打磨的教程 http://blog.csdn.net/jiangjunshow,教程通俗易懂,高中生都能看懂,还有各种段子风趣幽默,从深度学习基础原理到各领域实战应用都有讲解,我22年的AI积累全在里面了。注意,教程仅限真正想入门AI的朋友,否则看看零散的博文就够了。

http://www.jsqmd.com/news/647546/

相关文章:

  • 基于51单片机的步进电机调速与状态显示系统(仿真+源码+设计详解)
  • 多模态大模型学习笔记(三十五)——OCR全景认知:从字符识别到多模态理解的百年演进
  • Redis怎样提取门店具体坐标_通过GEOPOS指令读取Geo内部经纬度信息
  • JAVA低空经济无人机飞手接单小程序源码代码片段
  • 文件操作基础:读写、路径、异常处理全总结
  • MySQL中如何使用HEX函数转换十六进制_MySQL进制转换函数
  • 从实验室到野外:用Ublox-F9P+ROS搭建移动机器人高精度定位数据采集系统(含小车实战经验)
  • FlipIt翻页时钟屏保:为Windows桌面打造复古时间艺术的完整指南
  • ESP32物联网开发实战:从硬件选型到云端连接的高效路径
  • 配置驱动弹窗:JSON配置弹窗内容/按钮,避免重复开发弹窗|配置驱动开发实战篇
  • 构建高质量问答对的自动化 Pipeline
  • AI 编程工程化:Plugin——AI 工具能力的产品化形态
  • LLM+VLM+Audio联合推理场景下,如何让负载均衡器“看懂”模态语义?——基于跨模态Token热度图的智能分发算法
  • 从理论到实践:ResNet50在图像分类任务中的部署与调优
  • 【技术解析】BAN双线性注意力网络:低秩池化与多模态残差的高效融合
  • OpenClaw vs Hermes Agent:哪个更适合你的需求?
  • 开源创富思维:独立开发者如何把爱好变成收入?
  • 航空制造业前沿技术:TITAN-AM 计划启动
  • SourceGit:跨平台Git图形化客户端的完全使用指南
  • 终极指南:3分钟解锁微信网页版,让浏览器重获完整聊天体验
  • MPU6050模块DIY翻车实录:ID能读,数据全为零?原来是这颗电容惹的祸
  • STM32知识分享1(GPIO,OLED,中断系统,EXTI)
  • 期刊论文高效发表指南:虎贲等考 AI,让投稿从反复返修到一次达标
  • FPGA新手必看:Vivado里那些LUT、BRAM、DSP到底是干嘛的?一个电路实例带你搞懂
  • SITS2026 AI文案系统即将关闭灰度通道——仅剩最后72小时申请入口,附内部培训PPT与17个避坑checklist
  • 技术测试驱动开发的先测试后编码
  • 如何将纸质乐谱一键转换为数字格式?Audiveris OMR引擎让音乐数字化变得简单
  • OJ练习之Fibonacci数列
  • 避坑指南:IAR链接脚本(icf)与C代码#pragma配合,管理全局变量地址时常见的3个错误和解决方法
  • 从‘单活’到‘真双活’:手把手教你配置华三M-LAG+VRRP与M-LAG双活网关(含避坑指南)