增、删、改、查是各种类型数据最基本的操作,8.3节已经介绍了查,即索引和切片,本节介绍其他3种操作。[大谦MATLAB,dqmatlab点com]
追加元素
在元胞数组和列表原有内容的基础上追加元素,在MATLAB中直接对新索引赋值即可,在Python中则可以使用append, extend等方法进行追加。
【MATLAB】
>> A={1,'ABC',[1 2 3],{1 'a'}}
A =
1×4 cell 数组
{[1]} {'ABC'} {[1 2 3]} {1×2 cell}
>> A{5}='add'
A =
1×5 cell 数组
{[1]} {'ABC'} {[1 2 3]} {1×2 cell} {'add'}
【Python】
列表创建以后,可以使用多种方法向列表中添加元素。
使用列表对象的append方法在其尾部添加新的元素。该方法的速度比较快。下面创建一个列表,然后用append方法添加一个元素。
>>> a=[1,2,3,4]
>>> a.append(5)
>>> a
[1, 2, 3, 4, 5]
跟append方法一样,使用extend方法也是在列表尾部添加新元素。跟append方法不同的是,它在列表末尾一次性追加另一个序列的多个值,所以,它更适合列表的拼接。
>>> a=[1,2,3,4]
>>> a.extend([5,6])
>>> a
[1, 2, 3, 4, 5, 6]
extend方法的参数还可以是字符串、区间、元组、字典和集合等可迭代对象。例如:
>>> a=[1,2]
>>> a.extend('abc') #追加字符串
>>> a
[1, 2, 'a', 'b', 'c']
>>> a.extend((3,4)) #追加元组
>>> a
[1, 2, 'a', 'b', 'c', 3, 4]
>>> a.extend(range(5,7)) #追加区间
>>> a
[1, 2, 'a', 'b', 'c', 3, 4, 5, 6]
使用加号(+)可以将两个列表连接起来,组成一个新的列表,如:
>>> [1, 2, 3]+[4, 5, 6]
[1, 2, 3, 4, 5, 6]
使用乘法扩展,可以将原有列表多次重复,生成新的列表。下面创建一个有2个元素的列表,将它扩展3倍,生成新的列表b。
>>> a=[1,'a']
>>> b=a*3
>>> b
[1, 'a', 1, 'a', 1, 'a']
插入元素
Python中可以用insert方法在列表中指定位置插入元素,MATLAB中没有对应的方法,所以需要自己编程实现插入。
【MATLAB】
下面创建一个元胞数组,在第3个元素前面插入1个元素。创建一个辅助元胞数组,它比原来的元胞数组大1。将原数组前2个元素复制到辅助数组,在辅助数组第3个元素处插入元素,将原数组剩余的元素依次复制到辅助数组第3个元素后面。辅助数组就是插入元素后的元胞数组。
>> A={1,'ABC',[1 2 3],{1 'a'}}
A =
1×4 cell 数组
{[1]} {'ABC'} {[1 2 3]} {1×2 cell}
>> B=cell(1,length(A)+1) %辅助元胞数组,大1
B =
1×5 cell 数组
列 1 至 4
{0×0 double} {0×0 double} {0×0 double} {0×0 double}
列 5
{0×0 double}
>> B{1}=A{1}; %复制前2个元素
>> B{2}=A{2};
>> B{3}=7;add'; %插入第3个元素
>> B{4}=A{3}; %依次复制剩余元素
>> B{5}=A{4};
>> B
B =
1×5 cell 数组
{[1]} {'ABC'} {'add'} {[1 2 3]} {1×2 cell}
【Python】
使用列表对象的insert方法,可以在指定位置插入指定元素。该方法有两个参数,第1个参数指定插入的位置,指定一个索引号,即在它对应的对象前面插入新对象,索引号的基数为0;第2个参数指定插入的对象。
下面创建一个有4个元素的列表,使用列表对象的insert方法在第4个元素前面插入新对象5。
>>> a=[1,2,3,4]
>>> a.insert(3,5)
>>> a
[1, 2, 3, 5, 4]
修改元素
修改元胞数组和列表中的已有元素,先通过索引找到该元素,重新赋值即可。
【MATLAB】
>> A={1,'ABC',[1 2 3],{1 'a'}}
A =
1×4 cell 数组
{[1]} {'ABC'} {[1 2 3]} {1×2 cell}
>> A{3}='changed'
A =
1×4 cell 数组
{[1]} {'ABC'} {'changed'} {1×2 cell}
【Python】
>>> A=[1,'ABC',[1,2,3],[1,'a']]
>>> A
[1,'ABC', [1, 2, 3], [1, 'a']]
>>> A[2]='changed'
>>> A
[1,'ABC', 'changed', [1, 'a']]
删除元素
【MATLAB】
删除元胞,通过索引获取该元胞并将它置空即可。例如,下面将元胞数组A中第1行第2列的元胞删除:
>> A(1,2)=[]
在删除元胞时,大括号不出现在赋值语句中。
如果要删除整维,通过索引获取该维并进行置空。例如,下面删除元胞数组A的第2维:
>> A(2)=[]
【Python】
Python中,可以使用多种方法删除列表元素。
使用列表对象的pop方法可以删除指定位置的元素,如果没有指定位置,则删除列表末尾的元素。
下面创建一个列表,用其pop方法删除最后一个元素。
>>> a=[1,2,3,4,5,6]
>>> a.pop()
>>> a
[1, 2, 3, 4, 5]
继续删除列表中的第3个元素。注意位置索引号的基数为0。
>>> a.pop(2)
>>> a
[1, 2, 4, 5]
使用del命令删除指定位置的元素。下面删除列表中的第4个元素。
>>> a=[1,2,3,4,5,6]
>>> del a[3]
>>> a
[1, 2, 3, 5, 6]
pop方法和del命令都是使用索引删除列表元素,使用remove方法可以直接删除列表中首次出现的指定元素。下面从列表中直接删除第1个元素3。
>>> a=[1,2,3,4,5,6]
>>> a.remove(3)
>>> a
[1, 2, 4, 5, 6]
如果指定的元素在列表中不存在,返回一个出错信息。
>>> a.remove(10)
Traceback(most recent call last):
File "<pyshell#106>", line 1, in <module>
a.remove(10)
ValueError: list.remove(x): x not in list