
切片是序列独有的高级取值方式,列表、元组、字符串全部支持切片,一套规则可以通用这三类容器,学会切片之后,不用手动编写循环截取一段连续内容,依靠一套取值逻辑就能完成。切片也是新手理解的难点,起始边界、结束边界、步长正负很容易混淆,数智码力会把切片逻辑拆解清楚,搭配大量案例,帮大家吃透这套通用规则。
切片依靠三个参数控制截取范围,分别是起始位置、结束位置、步长。起始位置代表截取开始的地方,包含这个位置的内容;结束位置是截取的终止边界,不会包含结束位置对应的内容,这个左闭右开的规则是最核心的一点,也是大家最容易出错的地方。三个参数都可以省略,省略起始,默认从序列开头截取;省略结束,默认一直截取到序列末尾;省略步长,默认依次向后读取。
举一个基础的例子,设置起始位置为2,结束位置为6,程序会从第二条之后开始读取,一直读到第五条内容,第六条边界对应的内容不会被拿到。步长用来控制读取间隔,步长为2代表每隔一条内容取一次。步长还可以设置成负数,负数代表反向读取,读取顺序从末尾往开头走,这时起始位置编号要大于结束位置,才能拿到有效数据,反向切片经常用来快速颠倒序列顺序。

切片和按位置读取有一个很大区别:位置编号超出范围会直接报错,切片边界超出序列范围不会报错,会自动调整到序列实际边界,只返回能够取到的内容。这个容错特性,让切片在不确定数据长度的时候更加安全,不用提前判断编号是否合法。切片得到的结果类型和原序列保持一致。列表切片返回新列表,元组切片返回元组,字符串切片返回字符串。切片会生成一份新的数据,不会修改原来的序列,属于浅拷贝形式,顶层内容相互独立,如果内部嵌套了其他容器,嵌套部分依旧共用引用。
日常开发当中切片用途很多。截取文本片段、提取列表前面若干条数据、拿到末尾几条记录、间隔采样、快速颠倒文本顺序,都可以用切片实现。不少人习惯写循环截取数据,逻辑冗长、可读性差,换成切片之后简洁很多。但是切片也不是万能的,切片只能截取连续或者固定间隔的片段,如果想要挑选没有规律、不连续的多条内容,切片就无法实现,需要搭配推导式或者别的方式。同时步长不要设置得过于复杂,代码可读性优先,过于晦涩的反向切片,后续维护的时候其他人很难看懂。数智码力建议大家,练习的时候多查看切片返回结果,标记每个位置对应的内容,反复体会左闭右开、正负步长之间的差异。把切片这套通用规则吃透,相当于同时掌握列表、元组、字符串三种序列的截取方式,后续处理文本、批量提取数据都会得心应手。













