MATLAB和Python中可以用大括号或中括号直接创建元胞数组或列表,也可以用相关函数将其他类型的数据转换为元胞数组或列表。[大谦MATLAB,dqmatlab点com]
直接创建元胞数组或列表
MATLAB中使用大括号{}直接创建元胞数组,Python中用中括号[]直接创建列表。
【MATLAB】
与使用[]直接创建普通数组类似,MATLAB中可以用{}直接创建元胞数组。
>> A={}
A =
空的 0×0 cell 数组
通过在{}中直接写入元胞创建了一个有4个元胞的元胞数组,各元胞有不同的数据类型。
>> A={1,'ABC',[1 2 3],{1 'a'}}
A =
1×4 cell 数组
{[1]} {'ABC'} {[1 2 3]} {1×2 cell}
【Python】
可用中括号[]直接创建列表。下面创建一个没有元素的列表。
>>> a=[]
创建一个元素为一组数据的列表。
>>> a=[1,2,3,4,5]
>>> a
[1, 2, 3, 4, 5]
列表元素的数据类型可以不同,例如:
>>> a=[1,5, 'b',False]
>>> a
[1, 5, 'b', False]
列表的元素也可以是列表。
>>> a=[[1],[2],3,'four']
>>> a
[[1], [2], 3, 'four']
用函数创建元胞数组或列表
【MATLAB】
使用cell函数,可以给空元胞数组预分配指定大小的空间。下面的语句可以创建一个2行3列的空元胞数组:
>> B=cell(2,3)
B=
[] [] []
[] [] []
用赋值语句填充元胞:
>> B(1,3)={1:3}
B=
[] [] [1x3 double]
[] [] []
下面用num2cell函数将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函数可以创建空列表,或者将任何可以迭代的数据转换成列表。可迭代数据包括字符串、序列、元组、字典、集合等数据。
该函数不带参数时创建一个空的列表:
>>> a=list()
>>> a
[]
把字符串转换为列表
该函数的参数为字符串时,将该字符串转换为元素为字符串各字符组成的列表。
>>> 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个参数的情况。
>>> rg1=range(8)
>>> rg1
range(0, 8)
生成的序列从0开始,以1为间隔连续取8个值,即0-7。所以,虽然表面上看range(0, 8)定义的序列终点为8,实际上不包括8,这习惯上称为“包头不包尾”。可以用中括号和索引号获取序列的值,例如下面取序列第1个值和最后1个值:
>>> rg1[0];rg1[7]
0
7
下面是range函数有3个参数的情况,在0到9范围内每隔2个数取一次数:
>>> rg2=range(0,10,2)
>>> rg2
range(0, 10, 2)
通过索引获取序列前两个数:
>>> rg2[0];rg2[1]
0
2
可见相邻两个数之间的间隔为2。
将区间对象作为list函数的参数可以创建列表。
>>> a=list(rg1)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7]
>>> b=list(rg2)
>>> b
[0, 2, 4, 6, 8]
把元组、字典和集合转换为列表
使用list函数也可以把元组、字典和集合等可迭代对象转换为列表。关于元组、字典和集合,将在后面章节陆续介绍,这里先看操作效果。
将元组转换为列表:
>>> a=(1,'abc',True)
>>> list(a)
[1, 'abc', True]
将字典转换为列表:
>>> a={'张三':89,'李四':92}
>>> list(a)
['张三', '李四']
将集合转换为列表:
>>> a={1,'abc',123,'hi'}
>>> list(a)
[1, 123, 'hi', 'abc']
基本操作
MATLAB中使用length函数,Python中使用len函数获取元胞数组或列表的长度。
【MATLAB】
>> A={1,'ABC',[1 2 3],{1 'a'}};
>> length(A)
ans =
4
【Python】
使用len函数获取列表的长度。
>>> a=[1,2,3,4,5,6]
>>> len(a)
6
常常需要检查元胞数组或列表中是否包含指定元素。MATLAB中可以用cellfun函数结合isequal函数将元胞数组中的元素与指定元素逐个比较,Python中则可以直接用成员运算符in或not in进行判断。
【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:
>>> 1 in [1, 2, 3]
True
>>> 4 not in [1, 2, 3]
True