目錄:
一、字典的表親:集合
二、建立集合
三、訪問集合
四、不可變集合
五、課時27課後習題及答案
**************************
一、字典的表親:集合
**************************
Python的字典是對數學中對映概念支援的直接體現。字典有個表親:集合。哦?它們長得很像?
>>> num1 = {} >>> type(num1) <class 'dict'> >>> num2 = {1,2,3,4,5} >>> type(num2) <class 'set'>
在Python裡,如果用大括號括起一堆數字但沒有體現對映關係,那麼Python就會認為這堆玩意就是個集合。
集合的作用:唯一。舉個例子:
>>> num = {1,2,3,4,5,4,3,2,1} >>> num {1, 2, 3, 4, 5}
大家看到,我們根本就不需要做什麼,集合就會幫我們把重複的資料清理掉,這樣是不是很方便呢?但要注意的是,集合是無序的,也就是你不能試圖去索引集合中的某一個元素:
>>> num[2] Traceback (most recent call last): File "<pyshell#6>", line 1, in <module> num[2] TypeError: 'set' object does not support indexing
***************
二、建立集合
***************
建立集合有兩種方法:一種是直接把一堆元素用大括號{ }括起來;另一種是用set()。
>>> set1 = {"小甲魚","小魷魚","小護士","小甲魚"} >>> set2 = set(["小甲魚","小魷魚","小護士","小甲魚"]) >>> set1 == set2 True >>> set1 {'小魷魚', '小護士', '小甲魚'} >>> set2 {'小魷魚', '小護士', '小甲魚'}
現在要求去除列表[1,2,3,4,5,5,3,1,0]中重複的元素。沒學過集合時,可以這樣寫:
>>> list1 = [1,2,3,4,5,5,3,1,0] >>> temp = list1[:] >>> list1.clear() >>> for each in temp: if each not in list1: list1.append(each) >>> list1 [1, 2, 3, 4, 5, 0]
學習了集合後,可以這樣幹:
>>> list1 = [1,2,3,4,5,5,3,1,0] >>> list1 = list(set(list1)) >>> list1 [0, 1, 2, 3, 4, 5]
看!知識才是第一生產力。在這裡,由於set()創造了的集合內部是無序的,所以再呼叫list()將無序的集合轉換成列表就不能保證原來的列表的順序了(這裡Python好心辦壞事,把0放在最前邊去了。)所以如果關注列表中元素的前後順序問題,使用set()這個函式時就要提高警惕啦!
***************
三、訪問集合
***************
由於集合中的元素是無序的,所以並不能像序列那樣用下標來進行訪問,但是可以使用迭代把集合中的資料一個個讀取出來:
>>> set1 = {1,2,3,4,5,4,3,2,1,0} >>> for each in set1: print(each,end= ' ') 0 1 2 3 4 5
當然也可以使用in或者not in判斷一個元素是否在集合中已經存在:
>>> 0 in set1 True >>> "oo" in set1 False >>> "xx" not in set1 True
使用add()方法可以為集合新增元素,使用remove()方法可以刪除集合中已知的元素:
>>> set1 {0, 1, 2, 3, 4, 5} >>> set1.add(6) >>> set1 {0, 1, 2, 3, 4, 5, 6} >>> set1.remove(5) >>> set1 {0, 1, 2, 3, 4, 6}
******************
四、不可變集合
******************
有些時候,我們希望集合中的元素具有穩定性,也就是說,像元組一樣不能隨意的增加或者刪除集合中的元素。那麼我們可以定義不可變集合,這裡使用的是frozenset()函式,沒錯,就是把元素frozen(冰凍)起來:
>>> set1 = frozenset({1,2,3,4,5}) >>> set1 frozenset({1, 2, 3, 4, 5}) >>> set1.add(6) Traceback (most recent call last): File "<pyshell#54>", line 1, in <module> set1.add(6) AttributeError: 'frozenset' object has no attribute 'add'
*******************************
五、課時27課後習題及答案
*******************************