5.1 什么是集合(set)?
集合(set)是一個無序的不重復(fù)元素序列。
5.2 集合的創(chuàng)建
- 定義一個集合,將元素用
{}擴(kuò)起來。
example_set = {'basketball', 'volleyball', 'football'}
輸出結(jié)果如下:
{'volleyball', 'football', 'basketball'}
- 利用set()命令來創(chuàng)建集合
example_set = set('asdfghjkl')
輸出結(jié)果如下:
{'l', 's', 'g', 'k', 'd', 'f', 'a', 'j', 'h'}
從上面的定義中我們可以看出,定義好的集合輸出后元素都進(jìn)行了重新排列。這也正是體現(xiàn)了集合無序的特征。
5.3 集合的基本操作
5.3.1 集合元素的去重
從定義上可以看出,集合(set)是一種無序不重復(fù)的序列,那么我們在定義一個集合的過程中,如果該集合中重復(fù)出現(xiàn)了某個或者某些元素,該集合在輸出的時候,將只保留一個該元素,而會將多余重復(fù)的元素刪除。
例如:
example_set3 = {'basketball', 'volleyball', 'football', 'baseball', 'volleyball'}
print(example_set3)
輸出結(jié)果為:
{'basketball', 'football', 'baseball', 'volleyball'}
5.3.2 集合基本運(yùn)算
通過下面這個例子來說明一下集合的元素間的基本運(yùn)算:
set_a = set('abhduagejqedgd')
set_b = set('dihengahe')
print(set_a - set_b)
print(set_a | set_b)
print(set_a & set_b)
print(set_a ^ set_b)
輸出結(jié)果如下:
{'j', 'u', 'q', 'b'}
{'b', 'h', 'a', 'u', 'q', 'd', 'n', 'i', 'g', 'j', 'e'}
{'h', 'a', 'd', 'g', 'e'}
{'b', 'u', 'q', 'n', 'i', 'j'}
set_a - set_b:集合set_a中包含而集合set_b中不包含,換句話說就是集合set_a減去與set_b中重復(fù)的元素,剩余的元素,需要注意的是,如果集合set_b中有set_a中沒有的元素,這個相減的結(jié)果是不包括這些元素的。
set_a | set_b:集合set_a和集合set_b中包含的所有元素,相當(dāng)于兩個集合的并集。
set_a & set_b:集合set_a和集合set_b中共同包含的元素,相當(dāng)于兩個集合的交集。
set_a ^ set_b: 集合set_a和集合set_b中不同時包含的元素,可以理解為并集減去交集剩余的部分。
5.3.3 向集合中添加元素
向集合中添加元素有兩種方法,一種是set.add(object),一種是set.update()。
區(qū)別是,前者是將單個元素添加到集合中,如果集合中本身存在這個元素,則根據(jù)不重復(fù)原則,將不改變已有內(nèi)容;后者向集合中添加元素不限于單個元素,也可以是列表、元組、字典等。
5.3.4 從集合中刪除元素
從集合中刪除元素共有三種方法:
set.remove(object)
set.dicard(object)
set.pop()
前兩種都是對集合中指定元素的刪除,如果元素存在于集合中,效果是一樣的。如果要刪除的元素不存在于集合中,remove方法就會報錯,而discard方法則不會報錯。
pop方法則是隨機(jī)刪除集合中的一個元素。
增加和刪除元素參考以下例題:
example_set1.add('tennis')
example_set2.update( [2, 4, 6], {'name': 'Lily', 'number': 12, 'score': 88})
print(example_set1)
print(example_set2)
set_a.remove('d')
set_b.discard('e')
example_set3.pop()
print(set_a)
print(set_b)
print(example_set3)
輸出結(jié)果如下:
{'volleyball', 'basketball', 'football', 'tennis'}
{'score', 2, 'f', 4, 'a', 6, 'd', 'g', 'l', 'number', 's', 'name', 'h', 'j', 'k'}
{'b', 'u', 'a', 'q', 'g', 'h', 'j', 'e'}
{'i', 'a', 'd', 'g', 'n', 'h'}
{'basketball', 'football', 'baseball'}
需要注意的一點(diǎn)是,通過測試發(fā)現(xiàn),利用update方法往集合中增加元素的時候,整數(shù)或者整型是不被允許的,會報錯。此外,字典雖然可以被添加,但是只是把鍵添加進(jìn)去了,而值則被忽略掉了。
5.3.5 其他
len(set):計算集合的元素個數(shù)
set.clear():情況集合
object in set:判斷元素object是否在集合set中,如果是,返回True,如果不是,返回False。
5.4 集合的一些內(nèi)置函數(shù)
前面已經(jīng)提到了一部分,諸如set.add(object),set.update(),set_remove(object),set.discard(object)等等。其余的一些內(nèi)置函數(shù)在具體使用的過程中再慢慢探索和體會。
5.5 小結(jié)
這一小節(jié)主要學(xué)習(xí)了集合(set)這種數(shù)據(jù)類型的基本概念和使用方法,對于這種無序不重復(fù)的數(shù)據(jù)類型具體怎樣使用還需要進(jìn)一步學(xué)習(xí)。