python集合常用方法
一、列表
新建: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。