索引和切片

本页目录

索引是获取元胞数组和列表中的单个元素,切片则是获取元胞数组和列表中的连续多个元素。[大谦MATLAB,dqmatlab点com]

索引

元胞数组有元胞索引和内容索引两种索引方式,用小括号进行元胞索引,用大括号进行内容索引。列表用中括号进行索引。

【MATLAB】

通过给单个元胞赋值来生成元胞数组时,每次给一个元胞赋值。给元胞赋值有以下两种方式:

元胞索引:按标准数组方式把元胞索引号放到小括号中,把元胞的内容放在赋值语句的右端,用大括号括起来。下面通过元胞索引创建一个22的元胞数组A:

code.matlab
>> A(1,1)={[1 4 3; 0 5 8; 7 2 9]};
>> A(1,2)={'Liu zhong'};
>> A(2,1)={3+7i};
>> A(2,2)={-pi:pi/10:pi};

内容索引:以标准数组标注方式把元胞索引号以大括号括起来放在左侧,在赋值语句的右侧指定元胞内容。下面通过内容索引创建元胞数组A:

code.matlab
>> A{1,1}=[1 4 3; 0 5 8; 7 2 9];
>> A{1,2}='Liu zhong';
>> A{2,1}=3+7i;
>> A{2,2}=-pi:pi/10:pi;

所以,对于MATLAB元胞数组,可以进行元胞索引和内容索引,例如:

code.matlab
>> A={1,'ABC',[1 2 3],{1 'a'}};    %创建元胞数组
>> A(1)    %元胞索引,第1个元素
ans =
  1×1 cell 数组
    {[1]}
>> A{1}    %内容索引
ans =
     1

默认时MATLAB使用元胞索引。

【Python】

创建列表和向列表添加元素后,如果希望获取列表中的某个或某部分元素并对它们进行后续操作,就要用到索引和切片。

使用[]进行列表索引操作,中括号中为要索引的元素在列表中的索引号。从左到右索引时,索引号的基数为0;从右到左索引时,索引号的基数为-1。

下面创建一个列表ls:

code.python
>>> ls=['a','b','c']

通过索引获取列表中的第3个元素:

code.python
>>> ls[2]
'c'

获取列表中倒数第2个元素:

code.python
>>> ls[-2]
'b'

使用index方法获取指定元素在列表中首次出现的位置。语法格式为:

code.python
index(value.[start, [end]])

其中,value为指定的元素,start和end指定搜索的范围。

下面首先创建一个列表a:

code.python
>>> a=[1,2,3,4,2,5,6]

获取元素2在列表中第一次出现的位置,注意位置索引基数为0:

code.python
>>> a.index(2)
1

从第3个元素开始到最后一个元素,在这个范围内获取元素2第一次出现的位置:

code.python
>>> a.index(2,2)
4

切片

与元胞数组的索引相对应,元胞数组有索引切片和内容切片两种方式。元胞数组和列表的切片都要使用冒号。

【MATLAB】

code.matlab
>> A={1,'ABC',[1 2 3],{1 'a'}};    %创建元胞数组
>> A(2:3)    %元胞切片
ans =
  1×2 cell 数组
    {'ABC'}    {[1 2 3]}
>> A(2:end)    %元胞切片
ans =
  1×3 cell 数组
    {'ABC'}    {[1 2 3]}    {1×2 cell}
>> A{2:3}    %内容切片
ans =
    'ABC'
ans =
     1     2     3
>> A{2:end}    %内容切片
ans =
    'ABC'
ans =
     1     2     3
ans =
  1×2 cell 数组
    {[1]}    {'a'}

【Python】

切片操作从给定的列表中连续获取多个元素。常见的列表切片操作如表8- 所示。切片操作完整的定义是[start:end:step],取值范围的起点、终点和步长之间用冒号间隔。这3个参数都可以省略。注意“包头不包尾”原则。

从左往右切片时,位置索引的基数为0。省略start参数时,起点为列表的第1个元素;省略end参数时,终点为列表的最后一个元素;省略step参数时,步长为1。

从右往左切片时,位置索引的基数为-1。各参数的值都为负,数字的大小为从右边往左边数数的大小。比如最后一个元素的索引号为-1,倒数第2个为-2,如此类推。

各种切片操作的示例如表8-2中所示。

表8-2 列表的切片操作

切片操作 说明 示例 结果
[:] 提取整个列表 [1,2,3,4,5] [:] [1,2,3,4,5]
[start:] 提取从start位置开始到结尾的元素组成列表 [1,2,3,4,5] [2:] [3,4,5]
[:end] 提取从头到end-1位置的元素组成列表 [1,2,3,4,5] [:2] [1,2]
[start:end] 提取从start到end-1位置的元素组成列表 [1,2,3,4,5] [2:4] [3,4]
[start:end:step] 提取从start到end-1位置的元素组成列表,步长为step [1,2,3,4,5] [1:4:2] [2,4]
[-n:] 倒数n个元素组成列表 [1,2,3,4,5] [-3:] [3,4,5]
[-m:-n] 倒数第m个到倒数第n个元素组成列表 [1,2,3,4,5] [-4:-2] [2,3]
[::-s] 步长为s,从右向左反向提取组成列表 [1,2,3,4,5] [::-1] [5,4,3,2,1]