当前位置: 首页 > 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.cnnetsun.cn/news/1914684.html

相关文章:

  • HALCON copy_obj算子保姆级教程:从‘复制粘贴’到高效数据管理的避坑指南
  • Jellyfin Android TV客户端版本兼容性问题的深度诊断与解决指南
  • 魔兽争霸III现代化改造:5大核心功能让你的经典游戏焕发新生
  • 【硬件开发】自举电路设计实战:从原理到参数计算
  • 计及自适应预测修正的微电网 MPC 优化调度方法研究(Python代码实现)
  • 计算机考研408真题解析(2024-36 VLAN间通信与三层交换机路由机制实战剖析)
  • 救命!收藏这篇就够了, 从ChatGPT到Qwen/GLM,程序员小白大模型入门全攻略(附实战)
  • 从一次应急响应看致远OA wpsAssistServlet漏洞:攻击者如何利用,我们又该如何溯源与加固?
  • MECS UTX1010 461412A02 控制器
  • ncmdumpGUI:3步解锁网易云音乐NCM文件,实现跨平台音乐自由
  • 2025届必备的十大AI学术网站横评
  • 手把手教你用Ansible批量加固CentOS 7/8服务器,一键搞定等保三级合规
  • 有源电力滤波器(APF)模型在Matlab/Simulink中的仿真实践:质量过硬,治理电能质量问题
  • 2026最权威的AI辅助写作助手推荐
  • 企业级 AI Agent Harness Engineering 部署指南
  • 从零到一:在Win11与VS2022上部署OpenSceneGraph 3.6.5的避坑实践
  • 国芯筑基驭智城,第二届酒仙桥论坛解锁“十五五”产城AI增长新范式
  • 【无人机控制】基于LPV方法的无人机模型预测控制器附matlab代码
  • PreScan 8.5.0 与 MATLAB 联调:除了版本,你的编译器设置和启动流程对了吗?
  • 深入理解CUDA内存层次结构:从全局内存到共享内存的优化技巧
  • c语言可否在头文件中定义变量虽有防包含机制但多个源文件包含同一个头文件编译器是每个源文件为单元,当链接器合并的时候会发现相同变量的重复定义报错防包含主要防同一源文件间接包含相同头文件包含A,B。A含B
  • 02 华夏之光永存:(架构师级)昇腾芯片底层架构·达芬奇算力核心道级拆解
  • 从不确定性到生成式对接:DiffDock如何用扩散模型重塑药物发现
  • 卡梅德生物技术快报|BLI 亲和力成熟:噬菌体展示 + BLI 工程化实现方案
  • 2023最新实测:戴尔V3881十代CPU强装Win7的3个致命雷区(附PE启动盘制作)
  • Andorid url链接跳转到APP中的指定界面
  • Win11更新后启动失败?手把手教你用安装U盘进WinRE修复EFI分区和BCD文件
  • 【生成式AI架构设计黄金法则】:20年架构师亲授5大避坑指南与3套可落地的高可用方案
  • Win10 LTSC 1809(Hyper-V)环境下Docker与CVAT的兼容性部署指南
  • SAP物料主数据字段控制实战:如何让物料组从必填变选填(附完整配置流程)