目錄
站在用戶的角度思考問題,與客戶深入溝通,找到永平網(wǎng)站設(shè)計(jì)與永平網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、空間域名、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋永平地區(qū)。
前幾節(jié)我們已經(jīng)介紹了Python 中的 列表list , 元組tuple 和 字典dict ,本節(jié)來介紹Python 中的最后一種數(shù)據(jù)結(jié)構(gòu)—— 集合set 。
Python 中的 set 與 dict 很像,唯一的不同是, dict 中保存的是 鍵值對 ,而 set 中只保存 鍵 ,沒有 值 。
Python 集合 有如下特點(diǎn):
Python 集合的聲明有兩種方式:
創(chuàng)建 空集合 時(shí),只能用 set() ,而不能用 {} :
創(chuàng)建 非空集合 時(shí),可以用 set() ,也可以用 {} :
由于集合中的元素是唯一的,如果初始化時(shí)的 可迭代 數(shù)據(jù)中有重復(fù)的元素,則會自動刪去重復(fù)的元素:
使用 len() 函數(shù)可以查看集合中元素的個(gè)數(shù):
由于Python 集合中的元素的是無序的,所以可不能使用 下標(biāo) 的方式來訪問集合中的單個(gè)元素。
我們可以使用 for 循環(huán) 來遍歷集合中的所有元素:
我們可以對兩個(gè)集合進(jìn)行如下運(yùn)算:
交集與并集
in 運(yùn)算
使用 dir(set) 查看集合支持的所有方法:
下面一一介紹這些 非魔法方法 ,共17 個(gè)。
1. add 方法
由于集合中的元素是唯一的,向集合中添加元素時(shí)有兩種情況:
示例:
2. remove 方法
示例:
3. discard 方法
示例:
4. pop 方法
示例:
5. union 方法
示例:
6. update 方法
示例:
7. clear 方法
示例:
8. copy 方法
示例:
9. difference 方法
示例:
10. difference_update 方法
示例:
11. intersection 方法
示例:
12. intersection_update 方法
示例:
13. isdisjoint 方法
示例:
14. issubset 方法
示例:
15. issuperset 方法
示例:
16. symmetric_difference 方法
示例:
17. symmetric_difference_update 方法
示例:
(完。)
推薦閱讀:
Python 簡明教程 --- 8,Python 字符串函數(shù)
Python 簡明教程 --- 9,Python 編碼
Python 簡明教程 ---10,Python 列表
Python 簡明教程 ---11,Python 元組
Python 簡明教程 ---12,Python 字典
python中set()函數(shù)的用法如下:
工具/原料:臺式電腦、Win10、Python3.6.5。
1、首先按下“Win+R”組合鍵,打開運(yùn)行窗口,如下圖所示。
2、在打開文本框輸入“cmd”,點(diǎn)擊確定,如下圖所示。
3、在打開的cmd窗口中,輸入:“python”,點(diǎn)擊Enter鍵,如下圖所示。
4、在Python環(huán)境中,輸入:“x = set(('hi', 'hello', 'world'))”,點(diǎn)擊Enter鍵,如下圖所示。
5、在Python環(huán)境中,輸入:“print(x)”,如下圖所示。
6、點(diǎn)擊Enter鍵,即可使用Python內(nèi)置的set()函數(shù)創(chuàng)建一個(gè)集合對象,并打印出來,如下圖所示。
和列表類似,集合也是一個(gè)數(shù)據(jù)集合,其也不要求元素的類型一致。但是集合有下面兩個(gè)特點(diǎn):
?集合內(nèi)元素唯一。如不可以用1、2、1、1組成集合,因?yàn)槠浒貜?fù)的1。
?集合是無序的,添加元素時(shí)不能指定位置,刪除元素時(shí)也不能通過指定位置,只能通過指定值。當(dāng)然也不能通過位置來定位某個(gè)元素。
1、創(chuàng)建集合
我們可以從列表創(chuàng)建集合,將列表中的元素都加入到集合中,如果有重復(fù)的元素就僅保留一個(gè)。
a = set([1, 1, 3])
print(a)#輸出結(jié)果:set([1, 3])? ? ?
也可以從元組、字典和其他集合構(gòu)建集合。比如:
a = set((0, 1, 2, 3, 3, 2))? ?
使用的是字典的鍵來構(gòu)建集合,字典的值沒有被使用到,比如:
a = set({1:10, 2:20, 3:30})
從字符串構(gòu)建集合,其每個(gè)字符都成為集合的一個(gè)元素,比如:
a = set("abcdefabc")?
輸出結(jié)果:a={'c', 'e', 'f', 'b', 'd', 'a'}
另外一個(gè)集合構(gòu)建集合,比如:
a = set([1, 2, 3])?
b = set(a)? 輸出結(jié)果:b={1, 2, 3}
當(dāng)然也可以構(gòu)造一個(gè)空的集合,使用的方法是set()??占蠜]有任何元素,比如:
a = set()
1.添加元——add(值)
該函數(shù)只能添加一個(gè)元素。
如果添加的元素已經(jīng)在集合中存在,那么不會發(fā)生任何變化。
2.扔掉元素——discard(值)
該函數(shù)刪除集合中指定的值對應(yīng)的元素。
如果指定值在集合中不存在,則不做任何操作。
3.刪除指定值——remove(值)
該函數(shù)和discard()的不同之處在于,如果指定的值在集合中不存在,會拋出異常。
4.清空所有元素——clear()
該函數(shù)扔掉所有的元素。執(zhí)行完該函數(shù)后,該集合將變成一個(gè)空的集合。
a.clear()
5.刪除第一個(gè)元素——pop()
如果集合中有元素,則返回值為刪除掉的元素的值。
如果集合為空,則拋出異常。
6.得到差集——difference(集合對象)
該函數(shù)返回一個(gè)新的集合,該集合包含所有屬于a而不屬于b的元素,如圖所示。該操作不會改變原始集合a或者b的內(nèi)容。
7.差集操作符(-)
該操作符和difference()類似,返回一個(gè)新的集合,該集合包含所有屬于a而不屬于b的元素。該操作不會改變原始輸入集合a或者b的內(nèi)容。
8.從集合中刪除另一個(gè)集合中存在的元素——difference_update(集合對象)
該函數(shù)和difference()的不同是操作數(shù)a會被修改,而且沒有返回值。
9.得到兩個(gè)集合的交集——intersection(集合)
該函數(shù)返回所有的同時(shí)屬于集合a和集合b的元素組成的集合,即返回的是一個(gè)集合,該集合的所有元素都同時(shí)屬于集合a和b,如圖所示。輸入集合a和b在該過程中沒有發(fā)生任何改變。
10.交集操作符()
該操作符和intersection()的效果是一樣的。
11.刪除集合a中所有不屬于集合b的元素——intersection_update(集合)
該函數(shù)也是求交集,與intersection()不同的是其修改原始輸入集合,并且沒有返回值。這也是為何該接口函數(shù)后面帶有update字樣,因?yàn)槠涓铝嗽瓉淼妮斎爰稀?/p>
12.是否存在交集——isdisjoint()
該函數(shù)判斷是否存在這樣的元素,其同時(shí)屬于集合a和集合b。如果存在這樣的元素,返回False;否則返回True。
13.并集——union(集合a,集合b)
該函數(shù)返回一個(gè)新的集合,該集合的元素要么屬于輸入集合a要么屬于集合b。該操作不修改作為輸入的兩個(gè)集合a和b。如圖表示該函數(shù)返回的集合的內(nèi)容。
14.并集操作符(|)
該操作符和union()的效果是一樣的。其返回一個(gè)并集,并且不修改輸入集合的內(nèi)容。
15.添加屬于b而不屬于a的元素——update()
該函數(shù)在集合a中添加屬于b而不屬于a的所有元素。該操作和union()不同的是,其修改了輸入集合a,并且沒有返回值。
16.外集——symmetric_difference()
外集就是由只屬于集合a或者只屬于集合b的元素組成的集合,如圖所示。該操作返回一個(gè)新的集合,并且不修改原來的輸入集合a和b。
17.外集操作符(^)
該操作符和symmetric_difference()的效果是一樣的,也是返回一個(gè)新的集合,并且不會修改輸入的集合a或者b。
18.a和b的并集減去a和b的交集——symmetric_difference_update()
該函數(shù)和symmetric_difference()的區(qū)別是,其修改了集合a的值,并且沒有返回值。
19.是指定集合的子集嗎——issubset()
a是b的子集就是說集合a的所有元素都屬于集合b。
如果a等于b,那么a和b互為子集。
20.是指定集合的超集嗎——issuperset()
a是b的超集合就是說集合b中的所有元素都屬于集合a。
如果a是b的超集,那么b就是a的子集。
如果a等于b,那么它們互為子集,同時(shí)也互為超集。
一、創(chuàng)建集合
創(chuàng)建非空集合:集合中set括號中需要的參數(shù)的數(shù)據(jù)類型有:序列(包括字符串、列表、元組),字典可以轉(zhuǎn)為集合,注意數(shù)值類型不能作為集合的參數(shù),如int類型。
二、添加元素
add() 方法是將要添加的元素作為一個(gè)整體添加到集合中
update() 方法是把要傳入的元素拆分成單個(gè)字符,存于集合中,并去掉重復(fù)的
三、刪除元素
集合的刪除操作使用的方法跟列表是一樣的,使用的也是 remove 方法,只能單個(gè)刪除
四、遍歷集合
五、集合與字符串、列表、元組互轉(zhuǎn),集合轉(zhuǎn)字典
六、查找元素并刪除
函數(shù)原型: a.discard(b)
參數(shù)說明:a為一個(gè)set類型的變量;b表示要查找并刪除的元素
函數(shù)作用:在集合setVar中查找element元素,如果存在則刪除;如果沒找到,則什么也不做。該函數(shù)沒有返回值
七、pop用法
函數(shù)原型: set1.pop() ? ? 刪除并返回集合set1中的第一個(gè)元素,如果為空引發(fā)KeyError錯誤+
八、clear、copy和len的用法
clear ????方法用于清空集合中的所有元素
copy ????方法用于集合拷貝
len ????跟求序列的長度的函數(shù)len()是一樣的,返回的是集合中有多少個(gè)元素
九、求集合的交集、并集、差集和difference的用法
求集合的 交集 使用的符號是 “”
求集合的 并集 用的是符號 “|”
求集合的 差集 使用的符號是減號 “-”
difference? ? 等價(jià)于集合的差集 ,查看兩個(gè)集合的不同之處。這種不同指的是集合s1相對于集合s2,不同的地方,也就是所有在集合s1中,而不再集合s2中的的元素組成的新集合
十、運(yùn)算符判斷集合間關(guān)系和issuperset、issubset的用法
集合可以使用大于()、小于()、大于等于(=)、小于等于(=)、等于(==)、不等于(!=)來判斷某個(gè)集合是否完全包含于另一個(gè)集合,也可以使用子父集判斷函數(shù)。
issuperset ? ? 集合st1是否是集合st2的父集
issubset ? ??集合st1是否是集合st2的子集
十一、不可變集合frozenset的用法
frozenset ? ??該集合中的內(nèi)容是不可改變的,其他功能及操作跟可變集合set一樣
歡迎你來到站長在線的站長學(xué)堂學(xué)習(xí)Python知識,本文學(xué)習(xí)的是《Python中集合的交集、并集、差集和對稱差集運(yùn)算方法詳解》。主要講的是集合運(yùn)算的相關(guān)的概念,及運(yùn)算方法,包括:集合的交集、集合的并集、集合的差集、集合的對稱差集、集合的交集運(yùn)算方法、集合的并集運(yùn)算方法、集合的差集運(yùn)算方法、集合的對稱差集運(yùn)算方法。
在Python中,集合最常用的操作就是進(jìn)行交集、并集、差集和對稱差集的運(yùn)算。
要想學(xué)習(xí)集合的交集、并集、差集和對稱差集運(yùn)算方法,首先我們來了解這些名詞的含義:
設(shè)A、B兩個(gè)集合,由所有屬于集合A且屬于集合B的元素所組成的集合,叫做集合A與集合B的交集。在Python中,進(jìn)行交集運(yùn)算時(shí)使用“”符號。
給定兩個(gè)集合A、B,把他們所有的元素合并在一起組成的集合,叫做集合A與集合B的并集。在Python中,進(jìn)行并集運(yùn)算時(shí)使用“|”符號。
設(shè)A,B是兩個(gè)集合,則所有屬于A且不屬于B的元素構(gòu)成的集合,叫做集合A與集合B的差集。在Python中,進(jìn)行差集運(yùn)算時(shí)使用“-”符號。
對稱差集也稱為對稱差分或者補(bǔ)集,設(shè)A,B是兩個(gè)集合,所有不相同的集合,叫做集合A與集合B的對稱差集(對稱差分或者補(bǔ)集)。在Python中,進(jìn)行對稱差集運(yùn)算時(shí)使用“^”符號。
上面都是概念性的描述,下面站長在線來舉實(shí)際的場景來對交集、并集、差集和對稱差集運(yùn)算方法進(jìn)行深入淺出的解讀。
場景模擬:某高中三年級,文科班高考的科目是語文、數(shù)學(xué)、英語、政治、 歷史 和地理。理科班高考的科目是語文、數(shù)學(xué)、英語、物理、化學(xué)和生物。
設(shè)定集合A為文科班高考的科目,集合B為理科班高考的科目。
A = {'語文','數(shù)學(xué)','英語','政治',' 歷史 ','地理'}
B = {'語文','數(shù)學(xué)','英語','物理','化學(xué)','生物'}
我們使用集合的交集運(yùn)算的時(shí)候可以采用兩種方式,一種是使用“”運(yùn)算符進(jìn)行操作,另一種是使用 intersection() 方法來實(shí)現(xiàn)。
運(yùn)行結(jié)果:
運(yùn)行結(jié)果:
同理集合B和集合A的交集也是一樣。我這里就不重復(fù)了,自己去體驗(yàn)一下。
集合的并集運(yùn)算也有兩種方式,一種是使用“|”運(yùn)算符進(jìn)行操作,另一種是使用union()方法來實(shí)現(xiàn)。
運(yùn)行結(jié)果如下:
運(yùn)行結(jié)果為:
同理集合B和集合A的并集也是一樣。自己去體驗(yàn)一下吧!
集合的差集運(yùn)算也有兩種方式,一種是使用“-”運(yùn)算符進(jìn)行操作,另一種是使用difference()方法來實(shí)現(xiàn)。
運(yùn)行結(jié)果為:
上面是集合A和集合B的差集,但是集合B和集合A的差集就不是一樣的了哦!
運(yùn)行結(jié)果為:
從上面可以看出,集合A和集合B的差集 與 集合B和集合A的差集是不一樣的,(A - B)是A中存在的部分,(B - A)是B中存在的部分。
運(yùn)行結(jié)果:
同理,使用difference()方法進(jìn)行集合B和集合A的差集也是不同的
運(yùn)行結(jié)果:
集合的差集運(yùn)算也有兩種方式,一種是使用“^”運(yùn)算符進(jìn)行操作,另一種是使用symmetric_difference()方法來實(shí)現(xiàn)。
運(yùn)行結(jié)果為:
運(yùn)行結(jié)果為:
同樣的,集合B與集合A的對稱差集也是一樣,自己去體驗(yàn)一下。
我們對集合的交集、并集、差集和對稱差集運(yùn)算方法全部詳細(xì)的講解了一遍,通過運(yùn)行結(jié)果,我們得出結(jié)論:
集合中進(jìn)行交集、并集、對稱差集進(jìn)行運(yùn)算的時(shí)候,集合A與集合B,位置替換的時(shí)候,結(jié)果相同。
集合中進(jìn)行差集運(yùn)算的時(shí)候,集合A與集合B,位置替換的時(shí)候,結(jié)果不同,為前面那個(gè)集合獨(dú)立存在的部分。
到此為止,本節(jié)課的內(nèi)容《Python中集合的交集、并集、差集和對稱差集運(yùn)算方法詳解》就完全講完了,主要講的集合運(yùn)算的相關(guān)的概念,及運(yùn)算方法,包括:集合的交集、集合的并集、集合的差集、集合的對稱差集、集合的交集運(yùn)算方法、集合的并集運(yùn)算方法、集合的差集運(yùn)算方法、集合的對稱差集運(yùn)算方法。