Python 中序列的索引与分片
来源:互联网 发布:qrcode 生成算法 编辑:程序博客网 时间:2024/05/16 14:05
1. 索引(index)
python 中常用的序列有列表(list),元组(tuple)与字符串。对于 python 中的序列,可以使用索引来访问其成员,得到的结果是单个元素。其形式为 seq[index] 。另外 python 中的索引可以使用负整数来表示,最后一个元素使用负索引为 -1,向前依次递减。
>>>l = [1, 4, 7, 2, 5, 8, 3, 6, 9]>>>l[0]1>>>l[1]4>>>l[-1]9>>>l[-2]6
2. 分片(slice)
python 中序列的分片可用于访问一批序列元素,得到的结果是个序列。其形式为 seq[start:[end[:step]]] 。这个写法模仿自 python 方法声明中的非必须参数,在这里意指 end 与 step 根据语法可有可无。这样算来分片的形式就多得多了,根据分片中参数的个数,可知总的分片情况共有3种可能。
- 1). seq[start:] : 这种形式下分片所得结果为从 start 开始直到序列尾部的所有元素。
>>>l = [1, 4, 7, 2, 5, 8, 3, 6, 9]>>>l[0:][1, 4, 7, 2, 5, 8, 3, 6, 9]>>>l[-1:][9]
- 2). seq[start:end]:这种形式下分片所得结果为从 start 开始直到 end (不包括 end) 的所有元素( end 超出序列最大索引时以最大索引计)。这种形式下存在三种可能,分别是 start < end,start = end 以及 start > end。
>>>l = [1, 4, 7, 2, 5, 8, 3, 6, 9]>>>l[0:2] # start < end[1, 4]>>>l[0:0] # start = end[]>>>l[2:0] # start > end[]
上面的第二、三种情况的结果倒也好理解,第二种情况是要取从索引 0 开始,而又不包括索引 0 的所有元素,明显是取不到,所以结果为空。第三种情况就更好说了从索引 2 处开始,向后直到索引 0 处结束的所有元素,结果自然也是空。这两种情况取不到元素,貌似用不到。其实不然,这两种情形有个很有意思的用处。
>>>l = [2, 5, 8]>>>l[0:0] = [1, 4, 7]>>>l[1, 4, 7, 2, 5, 8]>>>l[6:0] = [3, 6, 9]>>>l[1, 4, 7, 2, 5, 8, 3, 6, 9]
其实这也就是说在分片中仅有 start 和 end 且 start <= end 的情况下,可以使用这种分片形式在原序列中从索引位置为 start 处开始插入一个新的序列中的所有元素。举个例子来说, list 中的 extend 方法可以在列表尾部直接插入一个序列中的所有元素。假如需要在在头部也实现这样的方法,则可以定义 extendleft 如下:
>>>def extendleft(seq, new_seq):... seq[0:0] = new_seq...>>>l = [2, 5, 8]>>>l.extend([3, 6, 9])>>>l[2, 5, 8, 3, 6, 9]>>>extendleft(l, [1, 4, 7])>>>l[1, 4, 7, 2, 5, 8, 3, 6, 9]
- 3). seq[start:end:step]:这种形式与上面的不同之处就在于多了个表示步长的 step 参数。这个 step 可为正或负,不可为零。为正时表示向后取元素时每隔 step 位取上一个,为负时则表示向前取元素时每隔 step 位取上一个。
>>>l=[1, 4, 7, 2, 5, 8, 3, 6, 9]>>>l[0:8:2][1, 7, 5, 3]>>>l[0:8:-2][]>>>l[8:0:-2][9, 3, 5, 7]>>>l[8:0:2][]
这种情况下, step 的正负性决定是向前还是向后取元素,step 的绝对值大小决定了每隔几位取一个序列成员(step 为1表示下一个元素,2表示下下一个元素,依次类推)。
3. slice (Python class, in 2. Built-in Functions)
python 中内置了 slice 类,它用于创建分片对象供序列使用。也就是说通过分片访问序列元素,可以使用 seq[s](s是一个slice对象)。
slice 类有两种可用形式,分别为 class slice(stop)
与 class slice(start, stop[, step])
。
>>>l = [1, 4, 7, 2, 5, 8, 3, 6, 9]>>>s = slice(3)>>>sslice(None, 3, None)>>>l[s][1, 4, 7]>>>s = slice(0, 8, 2)>>>l[s][1, 7, 5, 3]>>>l[0:8:2][1, 7, 5, 3]
- Python 中序列的索引与分片
- Python入门:字符串的分片与索引、字符串的方法
- 序列:索引,分片,运算
- Python的字符串索引和分片
- python 索引和分片
- python 分片、截断序列
- 序列之索引和分片
- python 字符串 索引和分片
- python -- 序列索引与切片的一些问题
- Mongo实战-分片集群的查询与索引
- Python的字符串分片
- elasticsearch-索引与分片实现原理
- python中关于分片拷贝
- python pandas 序列索引
- Python 中赋值和分片拷贝的区别
- Python 中多层级数据的生成与索引
- 【序列】分片
- 零基础学python-8.3 列表的索引、分片和矩阵
- # 网络
- 自己做的一个WIFI模块+app,监控蓄电池电量
- 通过poi获取到了商店的地理位置之后,如何获取商店的详细信息。是需要商店提供还是地图提供
- Android studio无法运行项目
- android 手机之间(机顶盒之间) 应用的交互(服务)
- Python 中序列的索引与分片
- 算法5.旅行售货员问题和数独游戏。
- El表达式里面的对象
- oracle 11g 一直提示 严重: 监听程序未启动或数据库服务未注册到该监听程序。启动
- 公司的app在魅族4 flyme5.1上打开就黑屏
- 数据库中的查询语句
- 大牛请进,Android音视频聊天各种实现方式问题
- VMware安装mac问题
- Matlab 3.接上回 reshape 函数,矩阵的变维,实现矩阵的再分割和再拼接,多维转化。