什么是切片

切片,是一个比较生疏的名词,这是现代计算机编程语言或者说Python里的一个概念,大致意思是从一个集合里切出一块来,就像切一块豆腐,一刀下去切出两块豆腐

先看一个函数range、返回值是列表,内容和传入range的函数有关。

a = range(1, 21)
print a

结果

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20

明白了,range可以产生从1到20共20个元素的列表,range的第二个参数不包含这个值,但包含第一个参数的值,每个元素值相差为1

切片是对有序的集合而言,意思从有序集合里提取数据构成子集集合,给定提取的起点start、终点end以及方向上的步长step,能否切出非空子集,起点start需能沿步长方向上到达终点。

字符串和列表、元组都是有序集合,均可实现切片操作,以列表为例给出切片的语法格式如下:
子集名 = 有序集合名[start : end : step]

上边range(1, 21)和切片里的start、end是呼应一致的,含起点start对应的值而不含终点end所对应的值。

step = 1

子集的构成是从start开始每step取一个数据一至到end-1位置结束,step默认为1时,可以省略不写。

s = "python"
a = list(s)
print a
b = a[2:5]
print b

程序的结果如下:

'p', 'y', 't', 'h', 'o', 'n'

't', 'h', 'o'

|-------|-------|-------|-------|-------|-------|
| 0 | 1 | 2 | 3 | 4 | 5 |
| 'p' | 'y' | 't' | 'h' | 'o' | 'n' |

从print b这条语句的打印结果['t', 'h', 'o']可知,'t'在a列表的index为2,'n'字符的index为5,那么a[2:5]的step为1,从't'开始逐个取回字符't'、'h'、'o'组成新的列表的子集b,而字符'n'的index为5,5作为取切片操作a[2:5]里的终点,其字符'n'不取回。从例子可以看出step 为1可以理解为"逐个取"。

step > 1

step可以大于1,这个时候对于step的理解可以这样认为,每step个取一个。

s = "python"
a = list(s)
print a
b = a[2:5:2]
print b

程序的结果如下:

'p', 'y', 't', 'h', 'o', 'n'

't', 'o'

对于列表a取切片a[2 : 5 : 2], 从index为2开始,每2个元素为一组取每组的第一个数据值,一只到index为5结束,但不取index为5的数据。

a[2 : 5 : 2]具体操作是这样的,从index为2的字符't'开始,到index为5的字符'n'之前,每2个为一组('t', 'h')、('o', 'n')取每组的第一个元素值't'、'o'即结果子集b的值。

再看一个例子:

a = range(12)
print a
b = a[1 : 10 : 3]
print b

结果是:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11

1, 4, 7

从两行输出结果的第一行可以看出range函数可以产生一个从0开始到小于12的整数的列表,共12个数据。第二行的输出[1, 4, 7]是怎么产生的呢?这个和对a列表的切片操作有关,a[1 : 10 : 3],这里a[1:10] = [1, 2, 3, 4, 5, 6, 7, 8, 9],每3个一组,从每组取第一个,即 [1, 2, 3],[4, 5, 6], [7, 8, 9]这三组,取每组第一个1、4、7构成b这个子集,最后得到的b = [1, 4, 7]。

相关推荐
Swizard12 分钟前
拒绝“狗熊掰棒子”!用 EWC (Elastic Weight Consolidation) 彻底终结 AI 的灾难性遗忘
python·算法·ai·训练
Spider赵毅13 分钟前
python实战 | 如何使用海外代理IP抓取Amazon黑五数据
python·tcp/ip·php
月光技术杂谈19 分钟前
基于Python的网络性能分析实践:从Ping原理到自动化监控
网络·python·性能分析·ping·时延·自动化监控
龘龍龙23 分钟前
Python基础学习(四)
开发语言·python·学习
洵有兮1 小时前
python第四次作业
开发语言·python
kkoral1 小时前
单机docker部署的redis sentinel,使用python调用redis,报错
redis·python·docker·sentinel
BoBoZz191 小时前
IterativeClosestPoints icp配准矩阵
python·vtk·图形渲染·图形处理
test管家2 小时前
PyTorch动态图编程与自定义网络层实战教程
python
laocooon5238578862 小时前
python 收发信的功能。
开发语言·python
清水白石0082 小时前
《Python 责任链模式实战指南:从设计思想到工程落地》
开发语言·python·责任链模式