Python入門實踐13 | 集合(Set)

Python入門實踐13 ——集合(Set)


集合(Set)
一捡鱼、目標(biāo)

1八回、掌握集合是存放一組沒有順序、不可可重復(fù)的堰汉、可以改變的數(shù)據(jù)的容器辽社。
2、掌握集合的操作翘鸭。

二滴铅、要點

1、 集合(set)

可以存放一組沒有順序就乓、不可可重復(fù)的汉匙、可以改變的數(shù)據(jù)拱烁。
所以一般情況下集合常用的兩個場景是:去重(如:列表去重);關(guān)系測試(如:取交集噩翠、取并集戏自、取差集等)。

  • 集合可以通過可迭代對象(字符串伤锚、元組擅笔、列表等)進(jìn)行創(chuàng)建;
  • 集合中的元素不可重復(fù)屯援;
  • 集合中的元素?zé)o序排列猛们。

2、創(chuàng)建集合
集合可以使用大括號 { } 或者set(iterable)方法創(chuàng)建狞洋,參數(shù)iterable為可迭代對象弯淘。
注意:創(chuàng)建一個空集合必須用 set() 而不是 { },因為 { } 是用來創(chuàng)建一個空字典吉懊。
如:
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}庐橙;

s1 = set('好好學(xué)習(xí)天天想上') # 將字符串分解為單個字符,作為集合的元素創(chuàng)建集合

s2 = set(('好好', '學(xué)習(xí)', '天天', '想上')) # 將元組分解為單個元素借嗽,作為集合元素創(chuàng)建集合

s3 = set(['好好', '學(xué)習(xí)', '天天', '想上']) # 將列表分解為單個元素态鳖,作為集合元素創(chuàng)建集合
3、集合操作
1)恶导、添加元素

(1)郁惜、添加單個元素s.add(element)
語法格式如下:
s.add(element);
參數(shù)element為集合允許添加的元素(例如數(shù)字甲锡、字符串兆蕉、元組等)。
如:
s1.add('4')

(2)缤沦、添加多個元素s.update(iterable)
語法格式如下:
s.update(iterable)
參數(shù)iterable為可迭代對象虎韵,可以是列表,元組缸废,字典等包蓝。

如:
s2.update(['4','5','6']) ;

2)企量、移除元素:
(1)测萎、s.remove( element)
將元素 element 從集合 s 中移除,如果元素不存在届巩,則會發(fā)生錯誤 硅瞧。
(2)、s.discard( element ):
將元素 element 從集合 s 中移除恕汇,如果元素不存在腕唧,不會發(fā)生錯誤或辖,但什么也不做 。
(3)枣接、s.pop():
從集合中隨機刪除一個元素颂暇,并返回刪除的元素 。

3)但惶、計算集合中元素的個數(shù)
len(s):計算集合 s 元素個數(shù)耳鸯。
4)、清空集合
s.clear():清空集合s中的元素
5)膀曾、移除集合
del s:移除集合s
6)片拍、判斷元素是否在集合中
x in s :判斷元素 x是否在集合 s中存在,存在返回 True妓肢,不存在返回 False。
7)苫纤、交集/并集/補集/差集


交集/并集/補集/差集
操作 函數(shù) 說明
交集 & s1.intersection(s2)不更新s1 s1.intersection_update(s2)更新s1 獲取兩個集合中共有元素
并集 | s1.union(s2) 獲取兩個集合去除重復(fù)元素后的全部元素
補集 - s1.difference(s2) 不更新s1 s1.difference_update(s2) 更新s1 獲取當(dāng)前集合去除與另一集合交集元素后的全部元素碉钠。
差集 ^ s1.ymmetric_difference(s2) 不更新s1 s1.symmetric_difference_update(s2) 更新s1 獲取兩個集合去除交集元素后的全部元素。

8)卷拘、成員關(guān)系
Python中提供了一些方法喊废,

  • 判斷一個集合中是否包含某一元素;
  • 判斷一個集合是否另一個集合的子集或超集栗弟。
  • 判斷一個集合與另一個集合是否沒有交集污筷。
子集或超集
操作 描述
In 來判斷操作符前方的值是否被后方的序列包含(成員關(guān)系)
not in 判斷操作符前方的值是否未被后方的序列包含(非成員關(guān)系)。
isdisjoint(set) 可以判斷集合是否與指定集合不存在交集乍赫,參數(shù)set為集合瓣蛀;如果成立返回結(jié)果為True,否則為False雷厂。
issubset(set) 可以判斷集合是否指定集合的子集惋增,參數(shù)set為集合;如果成立返回結(jié)果為True改鲫,否則為False诈皿。
issuperset(set) 可以判斷集合是否指定集合的超集,參數(shù)set為集合像棘;如果成立返回結(jié)果為True稽亏,否則為False。

9)缕题、復(fù)制集合

使用copy()方法能夠?qū)线M(jìn)行復(fù)制截歉。

4、集合內(nèi)置方法

方法 描述
add() 為集合添加元素
clear() 移除集合中的所有元素
copy() 拷貝一個集合
difference() 返回多個集合的差集
difference_update() 移除集合中的元素烟零,該元素在指定的集合也存在怎披。
discard() 刪除集合中指定的元素
intersection() 返回集合的交集
intersection_update() 返回集合的交集胸嘁。
isdisjoint() 判斷兩個集合是否包含相同的元素,如果沒有返回 True凉逛,否則返回 False性宏。
issubset() 判斷指定集合是否為該方法參數(shù)集合的子集。
issuperset() 判斷該方法的參數(shù)集合是否為指定集合的子集
pop() 隨機移除元素
remove() 移除指定元素
symmetric_difference() 返回兩個集合中不重復(fù)的元素集合状飞。
symmetric_difference_update() 移除當(dāng)前集合中在另外一個指定集合相同的元素毫胜,并將另外一個指定集合中不同的元素插入到當(dāng)前集合中。
union() 返回兩個集合的并集
update() 給集合添加元素
集合(Set)——思維導(dǎo)圖
三诬辈、步驟

1酵使、新建新建ex13.py文件。
2焙糟、錄入實例中代碼口渔。
3、運行穿撮。

四缺脉、實例(Python 3.0+)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
__title__ = ''
__author__ = 'jungle'
__mtime__ = '2019-08-28'
"""
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket);
s1 = set('好好學(xué)習(xí)天天想上') ; # 將字符串分解為單個字符,作為集合的元素創(chuàng)建集合
s2 = set(('好好', '學(xué)習(xí)', '天天', '想上'));  # 將元組分解為單個元素悦穿,作為集合元素創(chuàng)建集合
s3 = set(['好好', '學(xué)習(xí)', '天天', '想上']) ; # 將列表分解為單個元素攻礼,作為集合元素創(chuàng)建集合

print (s1);  # 顯示輸出結(jié)果為:{'好', '習(xí)', '上', '天', '想', '學(xué)'}
print (s2) ; # 顯示輸出結(jié)果為:{'好好', '想上', '學(xué)習(xí)', '天天'}
print (s3);  # 顯示輸出結(jié)果為:{'好好', '想上', '學(xué)習(xí)', '天天'}


# 添加單個元素
s1.add('4');

# 添加多個元素
s2.update(['4','5','6']);  # 添加列表到集合,列表元素會被分解為單個元素后添加到集合
s3.update('de') ; # 添加字符串到集合栗柒,字符串會被分解為單個元素后添加到集合

# 顯示輸出
print (s1) ;
print (s2) ;
print (s3) ;

# 創(chuàng)建集合
s1 = set(['Python','Java','C','C++','C#'])
s2 = set(['Python','Java','C','C++','C#'])

# 刪除元素
s1.remove('C++');
s2.discard('C++');
print (s1) ;
print (s2) ;
print (s1.pop()) # 取出集合元素

# 創(chuàng)建集合
s1 = set('Python')
s2 = set('PyCharm')

# 交集操作:獲取兩個集合中共有元素礁扮。
print (s1 & s2)  # 顯示輸出結(jié)果為:{'y', 'P', 'h'}
print (s1.intersection(s2))  # 顯示輸出結(jié)果為:{'y', 'P', 'h'}

# 并集操作:獲取兩個集合去除重復(fù)元素后的全部元素。
print (s1 | s2)  # 顯示輸出結(jié)果為:{'y', 'a', 'C', 'o', 'P', 'n', 't', 'm', 'r', 'h'}
print (s1.union(s2))  # 顯示輸出結(jié)果為:{'y', 'a', 'C', 'o', 'P', 'n', 't', 'm', 'r', 'h'}

# 補集操作:獲取當(dāng)前集合去除與另一集合交集元素后的全部元素瞬沦。
print (s1 - s2)  # 顯示輸出結(jié)果為:{'o', 't', 'n'}
print (s1.difference(s2))  # 顯示輸出結(jié)果為:{'o', 't', 'n'}
print (s2 - s1)  # 顯示輸出結(jié)果為:{'m', 'a', 'r', 'C'}
print (s2.difference(s1))  # 顯示輸出結(jié)果為:{'m', 'a', 'r', 'C'}

# 差集操作:獲取兩個集合去除交集元素后的全部元素太伊。
print (s1 ^ s2)  # 顯示輸出結(jié)果為:{'o', 't', 'm', 'a', 'r', 'n', 'C'}
print (s1.symmetric_difference(s2))  # 顯示輸出結(jié)果為:{'o', 't', 'm', 'a', 'r', 'n', 'C'}

s1 = set('好好學(xué)習(xí)')
s2 = set('天天想上')
s3 = set('好好學(xué)習(xí)天天想上')

print ('好' in s1) # 顯示輸出結(jié)果為:True
print ('好' not in s2) # 顯示輸出結(jié)果為:True
print (s1.isdisjoint(s2))  # 顯示輸出結(jié)果為:True
print (s1.issubset(s3))  # 顯示輸出結(jié)果為:True
print (s3.issuperset(s1))  # 顯示輸出結(jié)果為:True

a = set('小樓一夜聽春語')  # 創(chuàng)建集合存入變量a
b = a  # 創(chuàng)建變量b引用變量a的集合
c = a.copy()  # 創(chuàng)建變量c復(fù)制變量a的值
print (a)  # 顯示輸出結(jié)果為:{'春', '夜', '樓', '聽', '語', '小', '一'}
print (b)  # 顯示輸出結(jié)果為:{'春', '夜', '樓', '聽', '語', '小', '一'}
print (c)  # 顯示輸出結(jié)果為:{'春', '夜', '樓', '聽', '語', '小', '一'}

print(dir(set));
五、運行輸出:
{'banana', 'pear', 'orange', 'apple'}
{'學(xué)', '上', '想', '天', '好', '習(xí)'}
{'天天', '想上', '學(xué)習(xí)', '好好'}
{'天天', '想上', '學(xué)習(xí)', '好好'}
{'學(xué)', '上', '想', '天', '好', '習(xí)', '4'}
{'天天', '想上', '學(xué)習(xí)', '5', '6', '4', '好好'}
{'天天', '想上', 'e', '學(xué)習(xí)', 'd', '好好'}
{'C', 'Java', 'Python', 'C#'}
{'C', 'Java', 'Python', 'C#'}
C
{'y', 'h', 'P'}
{'y', 'h', 'P'}
{'o', 'r', 'h', 'm', 'C', 'n', 't', 'P', 'a', 'y'}
{'o', 'r', 'h', 'm', 'C', 'n', 't', 'P', 'a', 'y'}
{'t', 'o', 'n'}
{'t', 'o', 'n'}
{'m', 'C', 'a', 'r'}
{'m', 'C', 'a', 'r'}
{'o', 'r', 'm', 'C', 'n', 't', 'a'}
{'o', 'r', 'm', 'C', 'n', 't', 'a'}
True
True
True
True
True
{'樓', '一', '小', '夜', '聽', '語', '春'}
{'樓', '一', '小', '夜', '聽', '語', '春'}
{'聽', '春', '樓', '一', '語', '小', '夜'}
['__and__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__init_subclass__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']

注:

1逛钻、撰寫內(nèi)容來源于個人收集的文獻(xiàn)倦畅,屬學(xué)術(shù)探究范疇。
2绣的、版權(quán)屬于時進(jìn)軍個人叠赐,轉(zhuǎn)載需注明。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末屡江,一起剝皮案震驚了整個濱河市芭概,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌惩嘉,老刑警劉巖罢洲,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡惹苗,警方通過查閱死者的電腦和手機殿较,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桩蓉,“玉大人淋纲,你說我怎么就攤上這事≡壕浚” “怎么了洽瞬?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長业汰。 經(jīng)常有香客問我伙窃,道長,這世上最難降的妖魔是什么样漆? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任为障,我火速辦了婚禮,結(jié)果婚禮上放祟,老公的妹妹穿的比我還像新娘鳍怨。我一直安慰自己,他們只是感情好舞竿,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著窿冯,像睡著了一般骗奖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上醒串,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天执桌,我揣著相機與錄音,去河邊找鬼芜赌。 笑死仰挣,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的缠沈。 我是一名探鬼主播膘壶,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼洲愤!你這毒婦竟也來了颓芭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤柬赐,失蹤者是張志新(化名)和其女友劉穎亡问,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肛宋,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡州藕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年束世,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片床玻。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡毁涉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出笨枯,到底是詐尸還是另有隱情薪丁,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布馅精,位于F島的核電站严嗜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏洲敢。R本人自食惡果不足惜漫玄,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望压彭。 院中可真熱鬧睦优,春花似錦、人聲如沸壮不。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽询一。三九已至隐孽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間健蕊,已是汗流浹背菱阵。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留缩功,地道東北人晴及。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像嫡锌,于是被迫代替她去往敵國和親虑稼。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容