一、列表
新建:list = []
不要求内部元素类型相同
查、改:下标索引:list[0]、list[-1]
多维列表:list[axis1_index,axis2_index],通过不同轴上的坐标获取
删:删除指定下标元素:del(list[1])
删:删除并返回指定下标的元素: list.pop(index)
删:删除列表中此value的第一个匹配项:list.remove(value)
拼接两个列表中的"元素"(最外层括号下一级的元素):[1,2] + [3,4] or [[1,2]] + [[3,4]] or [1,2] + [[3,4]]
重复列表中的“元素”(最外层括号下一级的元素):[1,2]*3 or [[1,2]]*3 or [(1,2)]*3
元素是否在列表中(最外层括号的下一级元素):1 in [1,2,3] or [1,2] in [[1,2],1,2,3] true or [1,2] in [[2,1],1,2,3] false
增:列表追加一个or多个元素:list.append(elem) or list.extend(list2)
排序:list.sort()
二、元组
元组的元素无法修改;元组的元素的元素可以修改
新建:tuple = () or tuple1 = (1,2,3) or tuple2 = (1,[1,2],3)
增:不能
删:不能
改:不能 tuple1[1] = 5 错 , tuple2[1][0] = 5 正确
查:下标索引:tuple(index)
拼接 :(1,2) + (3,4)
重复:(1,2)*4
三、字典
新建:dict = {} or dict = {key:value,.....} key类型:string、tuple、frozenset、数字;value类型;任何类型
增:dict[key] = value
批量增(or批量改同key对应的value值):dict.update(dict2)
删:del(dict[key])
查:dict[key] or dict.get(key,default= value)
改:dict[key] = value
判断是否在字典的键中:dict.has_key(key)
列表形式返回字典的键or值:dict.keys() or dict.values()
列表形式返回字典的(key,value)元祖:dict.items()
四、set集合
新建:set1 = set() or set1 = {1,2,3} value类型:string、tuple、frozenset、数字等不可变类型;
增:set1.add(5)
增加多个:set.update([5,6,7,8])
删:set1.remove(1)
查:无法通过下标索引
改:不可变类型无法修改元素
与操作:set1 & set2
或操作:set1 | set2
与非操作:set1 ^ set2
减:set1 - set2
判断是否是子集or超集:set1.issubset(set2) or set1.issubset(set2)
转变成list or tuple: list(set1) or tuple(set1)
五、array数组
新建:arr = array([1,2,3,4]) 传入序列即可
查:1、通过下标获取arr[1];2、通过下标范围获取,arr2=arr1[0:2],共享变量空间;3、通过下标列表、下标数组获取arr[[1,2,3]]、arr[array([0,1,2])],新生成arr和原来的不共享变量空间;4、通过布尔数组获取arr[array([True,False,True])],把布尔数组中True元素对应的下标组成的序列list作为输入,只获取arr中对应list指定位置的元素,不共享变量空间;5、通过布尔列表获取arr[[True,False,True]],把True当成1、False当中0,获取arr中的元素,不共享空间;无意义
注意:
1、通过下标范围获取时list和array的差异:
list只能通过下标or下标返回获取,通过下标范围获取新列表 L2 = L1[0:2],L1和L2不共享变量空间,修改L2中值不改变L1中的值;
array中通过下标范围获取新列表arr2=arr1[0:2],arr1和arr2共享变量空间,修改arr2中值时arr1中的值也改变;
2、多维数组
arr[axis1_index,axis2_index]或者arr[axis1_sequence,axis2_sequence2] or arr[ [axis1_sequence,axis2_sequence2] ]获取,返回元素的结构和axis1_sequence结构相同。
运算:
1、基本数值运算:
arr1 +/- arr2 两数组对应位置元素相减, arr1 *// arr2 两数组对应位置元素相乘除, arr1+-*/2 数组中所有元素加减乘除2,arr**2 数组中所有元素取平方,arr>10 数组中元素大于10对应位置返回True,否则返回False;
2、对某一坐标方向运算
如:arr1.sum(axis=0),axis.min(axis=0),实际使用时,先将维度有物理意义的数据映射到对应的多维的array中,你知道哪个维度对应array哪个axis,因此你要对哪个维度进行操作时,axis赋值对应维度就行。
难点:
a、如何用多维array来表示多维数据;
通过类似“切片”的方法来表示,选取多维数据中一个维度作为arr的第一坐标轴,观察数据在这个维度的下标范围,有m个下标就有m个“切片”,即把下标取某个值index时的所有数据作为arr在坐标axis0下的对应坐标index的数组元素,如维度一有m个index取值,对应index的数据取值为arr0、arr1、,,,、arrm,则arr[arr0_axis0,arr1_axis0,...,arrm_axis0];然后依次循环其它维度,直到取完所有维度的数据。
b、直接对多维array在某一axis上操作,大脑不容易直观给出结果;
数字映射到2维平面or3维空间中,就可以感性的观察到数据的结构,从而大脑进行相应的计算,得出结果。但是,用arr表示时,其空间结构不直接、明了;当然若果是直接由实际数据映射过来的,想对哪个维度操作直接选择对应维度的axis就行。如果只是观察到了多维arr,则需要变换下思维。
对sum(axis=m)求和,即在第m维度上求和,那么实际物理意义是求和的数据在其它维度坐标下的index都相同,但是对应到arr这种括号表示的数据中,则需要从最外层往内部寻找,找到axis=m对应的括号[],然后对[]内部的元素arr1、arr2、...、arrm进行相应的操作,返回一个同结构的元素arr_res;(1)求和:把同结构的arri加起来,合成一个arr_res;(2)求最大、最小值:把所有同结构的元素arri进行比较,找出每个位置的最大、最小值,返回一个arr_res。
六、matrix矩阵
七、相互转换