一、python数据结构:
1)List:可更改的类型,下面是List的一些方法:
1、list.append(x):把一个元素添加到列表的结尾,a[len(a):] = [x]。
2、list.extend(L):通过添加指定列表的所有元素来扩充列表,相当于 a[len(a):] = L。
3、list.insert(i,x):在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引,例如a.insert(0,x)会插入到整个列表之前,而a.insert(len(a), x)相当于a.append(x)。
4、list.remove(x):删除列表中值为 x 的第一个匹配元素。如果没有这样的元素,就会返回一个错误。
5、list.pop([i]):从列表的指定位置移除元素,并将其返回。如果没有指定索引,a.pop()返回最后一个元素。元素随即从列表中被移除。(方法中i两边的方括号表示这个参数是可选的,而不是要求你输入一对方括号,你会经常在 Python 库参考手册中遇到这样的标记。)
6、list.clear():移除列表中的所有项,等于del a[:]。
7、list.index(x):返回列表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误。
8、list.count(x):返回x在列表中出现的次数。
9、list.sort():对列表中的元素进行排序(默认从小到大排序)。
10、list.reverse():倒排列表中的元素。
11、list.copy():返回列表的浅复制,等于a[:]。
备注:
1、python浅复制和深复制的区别:对于可更改类型(复合型对象),复制有分浅复制和深复制两种类型。
①浅复制(list.copy()):意味着新建一个对象B,但是其子元素仍然指向对应原对象A的子对象(也就是说,A中原有的数据改变,B也会跟着改变)。同时,只会对原对象A这一层进行拷贝,而不会递归的对子对象也进行拷贝(类似A新增操作就不会对B起作用)。
举个例子: A = [[1,2],[2,3,4]]
B = A.copy()
print(B) #输出:[[1,2],[2,3,4]]
C = [1,3,4]
A.append(C)
print(A)#输出:[[1,2],[2,3,4],[1,3,4]]
print(B)#输出:[[1,2],[2,3,4]]
A[0][0] = 'a'
print(A) #输出:[['a',2],[2,3,4],[1,3,4]]
print(B)#输出:[['a',2],[2,3,4],[1,3,4]]
总结:也就是说,对对象A进行浅复制之后得到的B对象,对原本复制的内容,A更改则B跟着改,但是自浅复制完后,A对除原有数据外进行操作,例如增加列表元素,都不会对B造成影响。
②深复制:意味着新建一个对象B,但是其子元素不再指向对应原对象A的子对象,类似于克隆出来的完全独立体。(也就是说,A中原有的数据改变,B不会跟着改变)。自然往A中的其他任何操作,都应该不会对B有任何影响的了。
重用上面例子的数据举例:
D = copy.deepcopy(A)
print(D)#[[1,2],[2,3,4]]
A[0][0] = 'a'
print(A) #输出:[['a',2],[2,3,4],[1,3,4]]
print(B)#输出:[['1',2],[2,3,4],[1,3,4]]数据不会跟着改变
2、用append()和不指定索引的pop()方法可以实现列表充当堆栈的进出操作。