1. 程式人生 > >python集合常用方法

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。

六、matrix矩陣

新建:m = matrix(arr1/list1) or m = matrix(arr2/list2) 傳入一維or二維陣列/列表,生成的矩陣永遠是二維的; 查:1、下標獲取值m[i,j]; 2、下標範圍獲取m[0:2,0:2],返回一個矩陣;(共享空間)  3、下標序列獲取m[[0,1],[0,1]],返回矩陣;(不共享空間)4、通過布林陣列來獲取;5、通過布林列表來獲取; 運算: m+-*/value都是對矩陣中每個元素操作;m1+-m2 對兩個矩陣對應元素操作;m1*m2 矩陣乘法;multiply(m1,m2),兩個矩陣對應元素相乘;

七、相互轉換

matrix<——list<——>array<——>matrix,matrix轉換成list,需要先轉換成二維array再轉換成二維list,list可以直接轉換成matrix;