Python的容器相關類

2021-09-28 22:52:49 字數 4792 閱讀 2082

絕大部分程式語言通常會提供的4中主流的資料結構是listsetdictdeque

其中,set集合無法記住新增這個元素的順序,set裡面的元素不能重複;list容器可以記住每次新增元素的順序,因此程式可通過索引來訪問元素,list容器的元素允許重複;dict容器裡面的每項資料都由key-value對組成,因此程式可通過key來訪問valuedeque則代表乙個雙端佇列,雙端佇列的特徵是它的兩端都可以新增、刪除元素,它既可作為棧(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)

#

frozensetset的不可變版本,可使用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 容器的名字 依賴映象 建...