課時27:集合:在我的世界裡,你就是唯一

那是個好男孩發表於2018-08-16

目錄:

  一、字典的表親:集合

  二、建立集合

  三、訪問集合

  四、不可變集合

  五、課時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課後習題及答案

*******************************

 

相關文章