標籤:技術分享 修改 pytho 排列 dex 預設 類型 排序 pen
1.列表:
>>> a=[123,333,333,1,145.5]>>> print(a.count(333),a.count(1),a.count(‘x‘)) #list.count(x)返回 x 在列表中出現的次數(2, 1, 0)>>> a.insert(2,-1) #list.insert(i,x) 在指定位置 i 插入一個元素x>>> a.append(333) #list.append(x) 把x添加到列表的結尾>>> a[123, 333, -1, 333, 1, 145.5, 333]>>> a.index(333) #list.index(x) 返回列表中第一個值為 x 的元素的索引。如果沒有匹配的元素就會返回一個錯誤1>>> a.remove(333) #list.remove(x)刪除列表中值為 x 的第一個元素。如果沒有這樣的元素,就會返回一個錯誤>>> a[123, -1, 333, 1, 145.5, 333]>>> a.reverse() #list.reverse()倒排列表list的元素>>> a[333, 145.5, 1, 333, -1, 123]>>> a.sort() #list.sort()對列表元素排序(具體怎樣排序的不清楚,數字為從小到大)>>> a[-1, 1, 123, 145.5, 333, 333]#類似 insert, remove 或 sort 等修改列表的方法沒有傳回值
View Code
2.將列表當做堆棧使用:
堆棧:先進後出
列表方法使得列表可以作為一個堆棧來使用,用 append() 方法可以把一個元素添加到堆棧頂。用不指定索引的 pop() 方法可以把一個元素從堆棧頂釋放出來
>>> stack=[3,4,5]>>> stack.append(6)>>> stack.append(7)>>> stack[3, 4, 5, 6, 7]>>> stack.pop() #不指定位置預設刪除最後一個7>>> stack.pop()6>>> stack[3, 4, 5]
View Code
3.將列表當做隊列使用
隊列:先進先出
首先瞭解Python常用內建模組:collections
1.namedtuple函數:用它建立一個自訂的元組tuple對象,它具備元組tuple的不變性,又可以根據屬性來引用,使用十分方便,注意d別寫掉了哈哈
>>> from collections import namedtuple>>> Point=namedtuple(‘Point‘,[‘x‘,‘y‘]) #表示一個點的二維座標>>> p=Point(1,2)>>> p.x1>>> p.y2
#類似的,用座標和半徑表示一個圓,也可以用namedtuple定義
Circle=namedtuple(‘Circle‘,[‘x‘,‘y‘,‘r‘])
#總結文法:namedtuple(‘名稱‘,[屬性])
2.deque(雙端隊列)
目的:為了高效實現插入和刪除操作的雙向列表,適合用於隊列和棧
原因:使用列表格儲存體資料時,按索引訪問元素很快,但是插入和刪除元素就很慢了,因為列表是線性儲存,資料量大的時候,插入和刪除效率很低。
deque除了實現list的append()和pop()外,還支援appendleft()和popleft(),這樣就可以非常高效地往頭部添加或刪除元素
>>> from collections import deque>>> q=deque([‘a‘,‘b‘,‘c‘])>>> q.append(‘x‘)>>> q.appendleft(‘y‘)>>> qdeque([‘y‘, ‘a‘, ‘b‘, ‘c‘, ‘x‘])>>> q.pop()‘x‘>>> q.popleft()‘y‘>>> qdeque([‘a‘, ‘b‘, ‘c‘])#總結文法:定義隊列q=deque(列表)
#deque支援頭部添加appendleft()和頭部刪除popleft(),遇到把列表當做隊列就這樣做才高效
列表推導式:
>>> vec=[2,4,6]>>> [3*x for x in vec][6, 12, 18]>>> [[x,x**2] for x in vec][[2, 4], [4, 16], [6, 36]]>>> [3*x for x in vec if x>3][12, 18]>>> [3*x for x in vec if x<2][]>>> vec1=[2,4,6]>>> vec2=[4,3,-9]>>> [x*y for x in vec1 for y in vec2][8, 6, -18, 16, 12, -36, 24, 18, -54]>>> [vec1[i]*vec2[i] for i in range(len(vec1))][8, 12, -54]>>> [str(round(355/113,i)) for i in range(1,6)] #round(x,i)返回浮點數x的四捨五入值,保留小數位元是i[‘3.0‘, ‘3.0‘, ‘3.0‘, ‘3.0‘, ‘3.0‘]>>> [x.strip() for x in vec]Traceback (most recent call last): File "<stdin>", line 1, in <module>AttributeError: ‘int‘ object has no attribute ‘strip‘ #錯誤的是類型>>> vec3=[‘john‘,‘jack‘,‘tom‘]>>> [x.strip() for x in vec3][‘john‘, ‘jack‘, ‘tom‘]
View Code
Python資料結構基礎內容