Python基礎篇之set

2021-08-11 21:06:58 字數 2955 閱讀 6044

dict的作用是建立一組 key 和一組 value 的對映關係,dict的key是不能重複的。

有的時候,我們只想要 dict 的 key,不關心 key 對應的 value,目的就是保證這個集合的元素不會重複,這時,set就派上用場了。

set 持有一系列元素,這一點和 list 很像,但是set的元素沒有重複,而且是無序的,這點和 dict 的 key很像。

建立 set 的方式是呼叫 set() 並傳入乙個 list,list的元素將作為set的元素:

s = set([『a』, 『b』, 『c』])

可以檢視 set 的內容:

print s

set([『a』, 『c』, 『b』])

請注意,上述列印的形式類似 list, 但它不是 list,仔細看還可以發現,列印的順序和原始 list 的順序有可能是不同的,因為set內部儲存的元素是無序的。

因為set不能包含重複的元素,所以,當我們傳入包含重複元素的 list 會怎麼樣呢?

s = set([『a』, 『b』, 『c』, 『c』])

print s

set([『a』, 『c』, 『b』])

len(s)

3 結果顯示,set會自動去掉重複的元素,原來的list有4個元素,但set只有3個元素。

由於set儲存的是無序集合,所以我們沒法通過索引來訪問。

訪問 set中的某個元素實際上就是判斷乙個元素是否在set中。

例如,儲存了班裡同學名字的set:

s = set([『adam』, 『lisa』, 『bart』, 『paul』])

我們可以用 in 操作符判斷:

bart是該班的同學嗎?

『bart』 in s

true

bill是該班的同學嗎?

『bill』 in s

false

bart是該班的同學嗎?

『bart』 in s

false

看來大小寫很重要,』bart』 和 『bart』被認為是兩個不同的元素。

set的內部結構和dict很像,唯一區別是不儲存value,因此,判斷乙個元素是否在set中速度很快。

set儲存的元素和dict的key類似,必須是不變物件,因此,任何可變物件是不能放入set中的。

最後,set儲存的元素也是沒有順序的。

set的這些特點,可以應用在哪些地方呢?

星期一到星期日可以用字串』mon』, 『tue』, … 『sun』表示。

假設我們讓使用者輸入星期一至星期日的某天,如何判斷使用者的輸入是否是乙個有效的星期呢?

可以用 if 語句判斷,但這樣做非常繁瑣:

x = 『???』 # 使用者輸入的字串

if x!= 『mon』 and x!= 『tue』 and x!= 『wed』 … and x!= 『sun』:

print 『input error』

else:

print 『input ok』

注意:if 語句中的…表示沒有列出的其它星期名稱,測試時,請輸入完整。

如果事先建立好乙個set,包含』mon』 ~ 『sun』:

weekdays = set([『mon』, 『tue』, 『wed』, 『thu』, 『fri』, 『sat』, 『sun』])

再判斷輸入是否有效,只需要判斷該字串是否在set中:

x = 『???』 # 使用者輸入的字串

if x in weekdays:

print 『input ok』

else:

print 『input error』

這樣一來,**就簡單多了。

由於 set 也是乙個集合,所以,遍歷 set 和遍歷 list 類似,都可以通過 for 迴圈實現。

直接使用 for 迴圈可以遍歷 set 的元素:

s = set([『adam』, 『lisa』, 『bart』])

for name in s:

… print name

… lisa

adam

bart

注意: 觀察 for 迴圈在遍歷set時,元素的順序和list的順序很可能是不同的,而且不同的機器上執行的結果也可能不同。

由於set儲存的是一組不重複的無序元素,因此,更新set主要做兩件事:

一是把新的元素新增到set中,二是把已有元素從set中刪除。

新增元素時,用set的add()方法:

s = set([1, 2, 3])

s.add(4)

print s

set([1, 2, 3, 4])

如果新增的元素已經存在於set中,add()不會報錯,但是不會加進去了:

s = set([1, 2, 3])

s.add(3)

print s

set([1, 2, 3])

刪除set中的元素時,用set的remove()方法:

s = set([1, 2, 3, 4])

s.remove(4)

print s

set([1, 2, 3])

如果刪除的元素不存在set中,remove()會報錯:

s = set([1, 2, 3])

s.remove(4)

traceback (most recent call last):

file 「」, line 1, in

keyerror: 4

所以用add()可以直接新增,而remove()前需要判斷。

Python基礎篇 集合Set

集合中的元素不能重複 常用來去重 只能包含可hash的型別 不可變的資料型別 集合是可變資料型別 無序 set 使用set 方法 使用 進行包裹,注意 如果 裡無任何元素則為空字典 add 新增單個可hash元素至現有元素中 update 新增乙個或者多個可迭代物件至現有元素中 discard 制定...

Python基礎之集合set

集合 set 是乙個無序的不重複元素序列。可以使用大括號 或者 set 函式建立集合,注意 建立乙個空集合必須用 set 而不是 因為 是用來建立乙個空字典。my set 不支援下標賦值和取值 my set 0 3 value my set 0 print value 通過遍歷獲取資料 my set...

Python基礎之dict和set

使用鍵值對 key value 儲存,具有極快的查詢速度 把資料放入dict的方法除了初始化指定外,還可以通過key放入 由於乙個key只能對應乙個value,所以,多次對乙個key放入value,後面的值會把前面的值沖掉 如果key不存在,dict就會報錯 為了避免key不存在的錯誤 1.通過in...