列表嘛,很亲切
表示方法:
a=[1,'abc',[12,23],(2,34),{'a':1},{2,3,4},array([[1,5],[2,4]])可以看到,列表里的元素几乎可以是任何类型的
空列表可以用
a=[] 或 a=list()生成,此时len(a)=0
支持索引,深层索引以及分片
a[1][0] 'a'
a[4]['a'] 1
a[-1][0] array([1,5])
a[0:2] [1,'abc']
列表是可变的,我们可以通过索引分片改变列表中的元素,但是列表中元素的子元素不一定可以改变,这取决与列表中元素是否为可变类型。String不能通过索引分片来改变它的内容。
a[0]=5
a[1]=[1,2,3,4]
a[4]['a']=7
在定义多维array的时候发现了一个问题,先马下来。
array([[1,2],1])通过,
array([[1, 2], 1], dtype=object)
array([1,[1,2]])报错,
ValueError: setting an array element with a sequence.
这里点击打开链接解释的很棒,解决办法就是主动告诉python我们要定义的这个array不是一个矩阵或者说向量,即
array([1,[1,2]],dtype=object)
python能自动识别array([[1,2],1])的dtype为object,但array([1,[1,2]])要手动输入,啥原因我也不知道。跑偏了。
通过分片改变列表:
a[0:2]=[1,2,4,5,6,7] 步长为1,左右两边的size可以不相等
a[::2]=[0,1,2,3] 步长不为1,左右两边的size必须相等
还可以通过索引,分片删除某些位置上的元素,用del
del a[0] //删除第一个元素
del a[::2] //删除奇数位上的元素
del a[:] //删除全部元素,保留a
del a //将变量a整个删除
列表中的API
首先是不改变列表本身的一些操作:
1.count 统计列表中某元素出现的次数
l=[1,1,1,2,3,4,5]
l.count(1) 3
2.index 返回列表中某个元素第一次出现的位置
l.index(1) 0
然后下面这些API会改变列表:
3.append 向列表的最后添加一个元素
l.append(6)
l
[1,1,1,2,3,4,5,6]
敲黑板!!!
append每次只向list的最后添加一个元素,所以不管你添加的元素的size是多少,都被视为新列表中的一个元素
l.append([7,8])
[1,1,1,2,3,4,5,6,[7,8])
那么怎么添加多个元素呢?
4. extend 把某个序列里的元素依次添加到list的结尾,相当于l=l+序列
l.extend([9,10,'a'])
[1,1,1,2,3,4,5,6,[7,8],9,10,'a']
5.insert 把某个新元素插入到list的某个位置,取代原来这个位置上的元素,原来位置上的元素的新位置+1。一次只插一个元素哦
l.insert(-1,['b','c'])
[1,1,1,2,3,4,5,6,[7,8],9,10,['b','c'],'a']
6.remove 移除列表中的第一次出现的某个元素
l.remove(['b','c'])
[1,1,1,2,3,4,5,6,[7,8],9,10,'a']
7.pop 与del类似,删除某个位置上的元素,但是会返回到删除的这个元素。
l.pop(-1)
'a'
8.sort 排序,从小到大,从头到尾排序。当list里含有不同类型的数据时会报错。
l=['a','c','u','d']
l.sort()
['a','c','d','u']
还有一个sorted函数,该方法不会改变原来的list
sorted(l)
9.reverse 反向排列,头变尾,尾变头。
l.reverse()
不想改变list的话可以用分片操作达到相同的效果,从头到尾取步长为-1即可。
a=l[::-1]
还有一个容易犯错的问题,就是
a=[1,2,3,5,7]
b=a
此时b和a指向同一个地方,改变b的值a也会跟着变。