零基礎學習 Python 之集合

寫在以前

今天要講的集合是和咱們以前講過的字符串,列表,元組,字典同樣,也是一種數據類型,用 set 表示,翻譯成中文叫「集合」。若是以前的數據類型忘記了,能夠經過下面的鏈接去看。java

零基礎學習 Python 之字符串python

零基礎學習 Python 之列表c++

零基礎學習 Python 之元組bash

零基礎學習 Python 之字典函數

集合的建立

集合的特色是元素無次序,不可重複,有的可變,有的不可變。咱們以前寫元組的時候說過它是列表的部分特徵和字符串的部分特徵的並集,那麼這裏的集合就是列表的部分特徵和字典的部分特徵的並集。學習

建立集合有兩種方法,一種是 set(),一種是 { },在這裏的話咱們不推薦使用後一種,由於咱們已經把 { } 給了字典,要避免歧義,在這裏說後一種方法的緣由是但願你知道有這麼一種方法創建集合,省得在某個地方看到的時候你會奇怪爲何字典的格式不對,其實它多是集合。ui

>>> a = set("leey")
>>> a
set(['y', 'e', 'l'])
>>> b = set(['python','c++','java','c++'])
>>> b
set(['python', 'java', 'c++'])
>>> c = {'a','b','c','a'}
>>> c
set(['a', 'c', 'b'])
複製代碼

看到上面的例子了嗎?輸出無序,重複的元素也被去掉,這是一種很是簡潔高效的元素去重方式。spa

集合的方法

集合的方法有不少,還記得怎麼看嗎?用 dir(set) 就能夠看到很多集合的方法,每一個函數的具體使用方法能夠用 help() 找到,我在這裏主要講幾個經常使用的。翻譯

1.add & update3d

add 是在集合中添加元素,在這裏有一點要注意創建空集合的時候要用 set 而不是 { },請看下面的例子:

>>> a = {}
>>> type(a)
<type 'dict'>
>>> a = set()
>>> type(a)
<type 'set'>
>>> a.add('rocky')
>>> a
set(['rocky'])
複製代碼

看到了嗎?雖然字典和集合都用 { },可是直接用 a = { },獲得的是字典而不是集合。在這裏提一嘴,type() 函數是用來查看對象的類型的函數。

update 是將另外一個集合合併過來的方法。

>>> a = set([1,2,3])
>>> b = set(['a','b','c'])
>>> a.update(b)
>>> a
set(['a', 1, 2, 3, 'b', 'c'])
>>> b
set(['a', 'c', 'b'])
複製代碼

2.pop & remove & clear

pop 每次刪除一個,並返回刪除的結果,由於集合沒有順序,因此是隨機刪除,而且 pop 沒有參數。

>>> a = set([1,2,3])
>>> a.pop()
1
>>> a
set([2, 3])
>>> a.pop(2)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: pop() takes no arguments (1 given)
複製代碼

remove 也是刪除,它沒有返回值,可是它能夠刪除指定元素,可是刪除的必須是集合中的元素,不然會報錯。

>>> a = set([1,2,3])
>>> a.remove(1)
>>> a
set([2, 3])
>>> a.remove(4)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
KeyError: 4
複製代碼

clear 也是刪除,但它是集合刪除中惹不起的存在,由於它直接會把集合清空。

>>> a = set([1,2,3])
>>> a.clear()
>>> a
set([])
複製代碼

集合的運算

集合的運算和咱們數學中在我看來是一個樣的,分爲元素和集合,集合和集合。

首先來講元素和集合。元素和集合只有一種關係,那就是屬於或者不屬於某個集合。

>>> a = set([1,2,3])
>>> 1 in a
True
>>> '1' in a
False
複製代碼

而後再來講集合和集合。集合和集合比較常見的有 5 種關係,下面容我一一道來(假設咱們有兩個集合 A 和 B)。

1.A 與 B 相等

>>> a = set([1,2,3])
>>> b = set([1,2,3])
>>> a == b
True
>>> b = set(['a','b','c'])
>>> a == b
False
複製代碼

2.A 是 B 的子集

子集的意思就是 A 的元素在 B 裏都有且 B 的元素個數比 A 多。能夠用 A < B 或者 A.issubset(B) 判斷,若是是 True 則表示 A 是 B 的子集。

>>> a = set([1,2,3])
>>> b = set([1,2,3,'a','b'])
>>> a < b
True
>>> a.issubset(b)
True
複製代碼

3.A 和 B 的並集

並集的意思就是 A 和 B 中的全部元素,能夠用 A | B 或者 A.union(B) 表示,吧並集的結果是生成一個新的對象,並非在這兩個集合上的擴充。

>>> a = set([1,2,3])
>>> b = set([1,2,3,'a','b'])
>>> c = a | b
>>> c
set(['a', 1, 2, 3, 'b'])
>>> c = a.union(b)
>>> c
set(['a', 1, 2, 3, 'b'])
複製代碼

4.A 和 B 的交集

交集的意思就是 A 和 B 中公有的元素。能夠用 A & B 或者 A.intersection(B) 表示,交集的結果也是生成一個新的對象。

>>> a = set([1,2,3])
>>> b = set([1,2,3,'a','b'])
>>> c = a & b
>>> c
set([1, 2, 3])
>>> c = a.intersection(b)
>>> c
set([1, 2, 3])
複製代碼

5.A 相對 B 的補集

補集也叫差集,意思就是隻屬於 A 的元素可是不屬於 B 的元素,你能夠理解成 A 集合中的元素去掉 A 與 B 的交集。能夠用 A - B 或者 A.difference(B) 表示。

>>> a = set(['a','b','c',1,2,3])
>>> b = set(['a','b',1,4])
>>> a - b
set(['c', 3, 2])
>>> a.difference(b)
set(['c', 3, 2])
複製代碼

還有一點我想說的是,用這些運算的時候最好用帶名字的函數,由於使用運算符的話可讀性不好。

寫在最後

到本篇爲止,Python 中常見的對象類型我都寫完了,算是完成了一個小目標,接下來的一個階段的話開始寫 Python 的語句方面,包括 if else,for 循環啦等等,由於在瞭解了基本的對象類型之後,就要學會如何去使用它們。

更多內容,歡迎關注公衆號「Python空間」,期待和你的交流。

在這裏插入圖片描述
相關文章
相關標籤/搜索