创建元胞数组或列表

MATLAB和Python中可以用大括号或中括号直接创建元胞数组或列表,也可以用相关函数将其他类型的数据转换为元胞数组或列表。[大谦MATLAB,dqmatlab点com]

直接创建元胞数组或列表

MATLAB中使用大括号{}直接创建元胞数组,Python中用中括号[]直接创建列表。

【MATLAB】

与使用[]直接创建普通数组类似,MATLAB中可以用{}直接创建元胞数组。

code.matlab
>> A={}
A =
  空的 0×0 cell 数组

通过在{}中直接写入元胞创建了一个有4个元胞的元胞数组,各元胞有不同的数据类型。

code.matlab
>> A={1,'ABC',[1 2 3],{1 'a'}}
A =
  1×4 cell 数组
    {[1]}    {'ABC'}    {[1 2 3]}    {1×2 cell}

【Python】

可用中括号[]直接创建列表。下面创建一个没有元素的列表。

code.python
>>> a=[]

创建一个元素为一组数据的列表。

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

列表元素的数据类型可以不同,例如:

code.python
>>> a=[1,5, 'b',False]
>>> a
[1, 5, 'b', False]

列表的元素也可以是列表。

code.python
>>> a=[[1],[2],3,'four']
>>> a
[[1], [2], 3, 'four']

用函数创建元胞数组或列表

【MATLAB】

使用cell函数,可以给空元胞数组预分配指定大小的空间。下面的语句可以创建一个2行3列的空元胞数组:

code.matlab
>> B=cell(2,3)
B=
    []    []    []
    []    []    []

用赋值语句填充元胞:

code.matlab
>> B(1,3)={1:3}
B=
    []    []    [1x3 double]
    []    []              []

下面用num2cell函数将MATLAB数组转换为元胞数组。

code.matlab
>> A=[1 5 3;9 6 2;8 0 5];
>> B=num2cell(A)
B =
    [1]    [5]    [3]
    [9]    [6]    [2]
    [8]    [0]    [5]

【Python】

使用list函数可以创建空列表,或者将任何可以迭代的数据转换成列表。可迭代数据包括字符串、序列、元组、字典、集合等数据。

该函数不带参数时创建一个空的列表:

code.python
>>> a=list()
>>> a
[]

把字符串转换为列表

该函数的参数为字符串时,将该字符串转换为元素为字符串各字符组成的列表。

code.python
>>> a=list('hello')
>>> a
['h', 'e', 'l', 'l', 'o']

把序列转为列表

用range函数创建一个序列,该对象在指定的范围内连续取值。range函数可有1个、2个或3个参数。有3个参数时指定序列的起点、终点和间隔的步长,比如从2开始,每隔2个数取一次数,取到10为止。有2个参数时指定起点和终点,步长取1。有1个参数时指定终点,起点取0,步长取1。

下面是range函数只有1个参数的情况。

code.python
>>> rg1=range(8)
>>> rg1
range(0, 8)

生成的序列从0开始,以1为间隔连续取8个值,即0-7。所以,虽然表面上看range(0, 8)定义的序列终点为8,实际上不包括8,这习惯上称为“包头不包尾”。可以用中括号和索引号获取序列的值,例如下面取序列第1个值和最后1个值:

code.python
>>> rg1[0];rg1[7]
0
7

下面是range函数有3个参数的情况,在0到9范围内每隔2个数取一次数:

code.python
>>> rg2=range(0,10,2)
>>> rg2
range(0, 10, 2)

通过索引获取序列前两个数:

code.python
>>> rg2[0];rg2[1]
0
2

可见相邻两个数之间的间隔为2。

将区间对象作为list函数的参数可以创建列表。

code.python
>>> a=list(rg1)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7]
>>> b=list(rg2)
>>> b
[0, 2, 4, 6, 8]

把元组、字典和集合转换为列表

使用list函数也可以把元组、字典和集合等可迭代对象转换为列表。关于元组、字典和集合,将在后面章节陆续介绍,这里先看操作效果。

将元组转换为列表:

code.python
>>> a=(1,'abc',True)
>>> list(a)
[1, 'abc', True]

将字典转换为列表:

code.python
>>> a={'张三':89,'李四':92}
>>> list(a)
['张三', '李四']

将集合转换为列表:

code.python
>>> a={1,'abc',123,'hi'}
>>> list(a)
[1, 123, 'hi', 'abc']

基本操作

MATLAB中使用length函数,Python中使用len函数获取元胞数组或列表的长度。

【MATLAB】

code.matlab
>> A={1,'ABC',[1 2 3],{1 'a'}};
>> length(A)
ans =
     4

【Python】

使用len函数获取列表的长度。

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

常常需要检查元胞数组或列表中是否包含指定元素。MATLAB中可以用cellfun函数结合isequal函数将元胞数组中的元素与指定元素逐个比较,Python中则可以直接用成员运算符in或not in进行判断。

【MATLAB】

code.matlab
>> A={1,'ABC',[1 2 3],{1 'a'}}
>> ele='ABC';
>> isIncluded=any(cellfun(@(x) isequal(x,ele),A))
isIncluded =
  logical
   1

返回值为1,说明元胞数组A包含元素'ABC',否则不包含。

【Python】

使用成员运算符in或not in判断列表中包含或不包含指定元素,条件满足时返回True,否则返回False。下面判断给定列表中是否包含元素1,是否不包含元素4:

code.python
>>> 1 in [1, 2, 3]
True
>>> 4 not in [1, 2, 3]
True