Python基本資料型別之set

2022-09-01 13:36:15 字數 2759 閱讀 4365

set是乙個無序且不重複的元素集合。

集合物件是一組無序排列的可雜湊的值,集合成員可以做字典中的鍵。集合支援用in和not in操作符檢查成員,由len()內建函式得到集合的基數(大小), 用 for 迴圈迭代集合的成員。但是因為集合本身是無序的,不可以為集合建立索引或執行切片(slice)操作,也沒有鍵(keys)可用來獲取集合中元素的值。

set和dict一樣,只是沒有value,相當於dict的key集合,由於dict的key是不重複的,且key是不可變物件因此set也有如下特性:

不重複元素為不可變物件

建立 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

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'

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

直接使用 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之基本資料型別

1 數字型別 整形 int 1.1 作用 記錄年齡 身份證號 個數等 1.2 定義 age 18print type age 浮點型 float 1.3 作用 記錄薪資 身高 體重 1.4 定義 salary 3.3height 1.87 weight 70.3 print type salary ...

Python入門之基本資料型別

由3部分組成 python 裡面一切都是指標 型別也分為可變型別和不可變型別 其中可變型別 int string,tuple a 1,2,3 可變型別如list,tuple,dict 注意 python雖然是動態語言,但是如果變數的型別確定了之後,就不能更改。整型與boolean print 1 1...

Python入門之基本資料型別

1.整數型別 可正可負,沒有範圍。4種進製表示形式 十進位制 1008,101 二進位制 0b1001,0b1001 八進位制 0o123,0o456 十六進製制 0x789,0xabc 2.浮點數 運算存在不確定尾數 如 0.1 0.2 0.3 round 0.1 0.2,1 0.3 round ...