元素排序和筛选

用sort方法对数组元素进行排序。MATLAB中要求元胞数组中的元素为字符数组。Python中可以通过列表解析式和filter方法对元素进行筛选。[大谦MATLAB,dqmatlab点com]

元素排序

【MATLAB】

MATLAB中用sort对元胞数组中的元素进行排序。

code.matlab
>> A={'hello','Python','MATLAB','world'}
A =
  1×4 cell 数组
    {'hello'}    {'Python'}    {'MATLAB'}    {'world'}
>> sort(A)
ans =
  1×4 cell 数组
    {'MATLAB'}    {'Python'}    {'hello'}    {'world'}

对字符数组进行排序时,比较的是字符的ASCII码值。

【Python】

用列表对象的sort方法对列表中的元素进行排序。默认时为从小到大排序,不必设置方法参数。下面创建一个列表,用sort方法将列表元素从小到大进行排序。

code.python
>>> ls=[4,2,1,3]
>>> ls.sort()
>>> ls
[1,2,3,4]

设置sort方法reverse参数的值为True,对列表中的元素按照从大到小的顺序进行排列。

code.python
>>> ls.sort(reverse=True)   #降序排列
>>> ls
[4,3,2,1]

还可以使用Python的内置函数sorted进行排序。该函数不对原列表进行修改,而是返回一个新的列表。设置方法的reverse参数的值为True,将列表元素进行降序排列。

code.python
>>> ls=[4,2,1,3]
>>> a=sorted(ls)
>>> a
[1,2,3,4]
>>> a=sorted(ls, reverse=True)
>>> a
[4,3,2,1]

元素的筛选

【MATLAB】

MATLAB中对元胞数组进行筛选,先用MATLAB函数或自定义函数获取满足筛选条件的元素对应的索引号,然后利用索引号对元胞数组进行索引得到满足筛选条件的元素。

code.matlab
>> A={'hello','Python','MATLAB','world'}
A =
  1×4 cell 数组
    {'hello'}    {'Python'}    {'MATLAB'}    {'world'}
>> lIndex=endsWith(A,'n');    %是否以'n'结尾,获取索引
>> filtered=A(lIndex)    %用索引获取元素
filtered =
  1×1 cell 数组
    {'Python'}
>> lIndex=cellfun(@(x) length(x)>=6,A);    %元素长度是否>=6,获取索引
>> filtered=A(lIndex)    %用索引获取元素
filtered =
  1×2 cell 数组
    {'Python'}    {'MATLAB'}

【Python】

Python中筛选列表数据可以有多种方法,这里使用列表解析式和filter函数两种方式进行过滤。

下面创建一个列表a,元素为数字0-8。使用列表解析式过滤列表中大于3的数字,返回到列表b。

code.python
>>> a=range(9)
>>> b=[i for i in a if i>3]
>>> b
[4, 5, 6, 7, 8]

列表b中获取了列表a中大于3的元素。

下面使用filter函数进行过滤。该函数第1个参数设置过滤的条件表达式,第2个参数指定要过滤的列表。过滤的条件表达式用匿名函数指定列表a中的数字大于3。

code.python
>>> a=range(9)
>>> b=filter(lambda i:i>3,a)
>>> b
<filter object at 0x00000000031A5608>

filter函数返回的结果是一个filter对象,将它转换为列表。

code.python
>>> c=list(b)
>>> c
[4, 5, 6, 7, 8]

可见,列表c中获取了列表a中大于3的元素。