絕大部分程式語言通常會提供的4中主流的資料結構是list
、set
、dict
和deque
。
其中,set
集合無法記住新增這個元素的順序,set裡面的元素不能重複;list
容器可以記住每次新增元素的順序,因此程式可通過索引來訪問元素,list容器的元素允許重複;dict
容器裡面的每項資料都由key-value
對組成,因此程式可通過key
來訪問value
;deque
則代表乙個雙端佇列,雙端佇列的特徵是它的兩端都可以新增、刪除元素,它既可作為棧(stack
)使用,也可作為佇列(queue
)使用。
一、set和fronset
set
集合有兩個特徵:set
不記錄元素的新增順序;元素不允許重複。
set
集合是可變容器,程式可以改變容器的元素。與set
對應的還有frozenset
集合,它是set
的不可變版本,元素是不可變的。
set
集合的方法的用法例項如下:
## 1.使用花括號構建set集合
c =## 2.新增元素
c.add(
"元素2"
)c.add(7)
print
('c集合為:'
,c,' c集合個數:'
,len
(c))
# c集合為: c集合個數: 3
## 3.刪除元素
c.remove(7)
print
('c集合為:'
,c)# c集合為:
## 4.使用set()函式(構造器)來建立set集合
books =
set(
)books.add(
'b1'
)books.add(
'b2'
)print
('books集合為:'
,books)
# books集合為:
## 5.使用issubset()方法或者<=運算子 判斷是否為子集
books1 =
print
(books1.issubset(books)
)#true
print
(books1 <= books)
#true
## 6.使用issuperset()方法或者》=運算子 判斷是否為父集
print
(books1.issuperset(books)
)#true
print
(books1 >= books)
#true
## 7.使用 - 或者difference()方法,用前面的set集合減去後面的set集合的元素
## 不改變books集合裡的元素
result1 = books - books1
print
(result1)
# result2 = books.difference(books1)
print
(result2)
# ## 改變books集合裡的元素
books.difference_update(books1)
print
(books)
# ## 8.用& 或者intersection()方法,獲取兩個set集合的交集
## 不改變原來集合
tvs1 =
tvs2 =
inter1 = tvs1 & tvs2
print
(inter1)
# inter2 = tvs1.intersection(tvs2)
print
('inter2:'
,inter2,
' tvs1'
,tvs1)
# inter2: tvs1
## 改變原來集合
tvs1.intersection_update(tvs2)
print
(tvs1)
# ## 9.用^ 計算兩個集合異或的結果,就是用兩個集合的並集減去交集的元素
tvs1 =
tvs2 =
xor = tvs1 ^ tvs2
print
(xor)
# ##10.計算兩個集合的並集
## 不改變集合的元素
un = tvs1.union(tvs2)
print
(un)
# ## 改變集合的元素
tvs1.update(tvs2)
print
(tvs1)
#
frozenset
是set
的不可變版本,可使用set
集合中不改變集合本身的方法。
二、雙端佇列(deque)
棧是一種後進先出(lifo)的線性表,佇列是一種先進先出(fifo)的線性表。
對於乙個雙端佇列
來說,它可以從兩端分別進行插入、刪除操作。如果程式將所有的插入、刪除操作都固定在一端進行,那麼這個雙端佇列就變成了棧
;如果固定在一端只新增元素,在另一端只刪除元素,那麼它就變成了佇列
。因此,deque
既可被當成佇列使用,也可被當成棧使用。
>>
>
from collections import deque
>>
>
[e for e in
dir(deque)
ifnot e.startswith(
'_')][
,,'clear'
,'copy'
,'count'
,'extend'
,'extendleft'
,'index'
,'insert'
,'maxlen'
,'pop'
,'popleft'
,'remove'
,'reverse'
,'rotate'
]
三、python的堆操作
python並沒有提供「堆」這種資料型別,它是直接把列表當成堆處理。python提供的heapq
包中有一些函式,當程式用這些函式來操作列表時,該列表會表現出「堆」的行為。
python提供的是基於小頂堆的操作,因此python可以對list
中的元素進行小頂堆排序,這樣程式每次獲取堆中元素時,總會取得堆中最小的元素。
>>
>
import heapq
>>
> heapq.__all__[,
,'heapify'
,'heapreplace'
,'merge'
,'nlargest'
,'nsmallest'
,]
堆操作的示例**如下:
from heapq import
*my_data =
list
(range(10
))0.5)
print
('my_data的元素:'
, my_data)
# my_data的元素: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0.5]
## 對my_data應用堆屬性
heapify(my_data)
print
('應用堆之後my_data的元素:'
, my_data)
# 應用堆之後my_data的元素: [0, 0.5, 2, 3, 1, 5, 6, 7, 8, 9, 4]
## 將元素7.2推入堆後
7.2)
print
(my_data)
# [0, 0.5, 2, 3, 1, 5, 6, 7, 8, 9, 4, 7.2]
## 彈出堆中最小元素
print
)# 0
print
)# 0.5
print
('彈出兩個元素後:'
, my_data)
# 彈出兩個元素後: [1, 3, 2, 7, 4, 5, 6, 7.2, 8, 9]
## 彈出最小元素,壓入指定元素
print
(heapreplace(my_data,
8.1)
)# 1
print
('執行replace後my_data的元素:'
, my_data)
# 執行replace後my_data的元素: [2, 3, 5, 7, 4, 8.1, 6, 7.2, 8, 9]
## 取得堆中最大、最小的幾個元素
print
('my_data中最大的3個元素:'
,nlargest(
3,my_data)
)# my_data中最大的3個元素: [9, 8.1, 8]
print
('my_data中最小的3個元素:'
,nsmallest(
3,my_data)
)# my_data中最小的3個元素: [2, 3, 4]
C 容器vector類的相關操作
一 capacity容量 vector的容量永遠大於或等於其大小,一旦容量等於大小,便是滿載,下次再有新增元素,整個vector容器就得另尋居所。1 c.capacity 不重新分配記憶體空間的話,c可以儲存多少元素 2 c.reserve 分配至少能容納n個元素的記憶體空間 vector v fo...
c 容器相關
順序容器 所有的vector都適用於deque list 特有的成員函式 push front 在前面插入 pop front刪除前面的元素 sort 排序 list不支援stl的演算法sort remove 刪除和指定值相同的所有元素 unique 刪除所有和前乙個元素相同的元素 做到不重複需要u...
容器相關操作
顯示docker容器列表 命令格式 docker ps a實時操作 docker ps a container id 容器id image 依賴映象 command 容器的啟動命令 created 容器的建立時間 status 容器是否啟動與時長 ports 埠 names 容器的名字 依賴映象 建...