Python學(xué)習(xí)日記-集合

本章目錄

  • Part One:基本概念
  • Part Two:常用方法
  • Part Three:不可變集合

基本概念

集合Set的原理和字典比較類似确镊,也是一組key的集合缸兔,但是沒有value,所以從實(shí)現(xiàn)上看起來又和列表類似。
Set具有字典的大部分特性,比如Set也是無序的扁掸,不能保證元素的添加順序回窘,只能存入不可變元素等诺擅。另外,Set最重要的一個特性就是它的元素是唯一的啡直,如果存在兩個同樣的元素的時候烁涌,Python只會保存其中的一個。

  1. 集合初始化
# set方法初始化集合
set_nba = set(["Miami Heat", "Cleveland Cavaliers", "Houston Rockets", "Golden State Warriors"])
print(set_nba)
# {}方式初始化集合
tarena_train = {"Java", "Android", "Python", "Android"}
# 打印結(jié)果可知酒觅,"Android"這個重復(fù)項(xiàng)只會保留一個
print(tarena_train)

結(jié)果為:

{'Golden State Warriors', 'Cleveland Cavaliers', 'Miami Heat', 'Houston Rockets'}
{'Python', 'Android', 'Java'}
  1. 空集合
set_temp = set()
print(type(set_temp))
# set方法只有一種空集合創(chuàng)建方式就是set方法
# {}只會創(chuàng)建字典dict
empty = {}
print(type(empty))

結(jié)果為:

<class 'set'>
<class 'dict'>
  1. 集合操作
    set可以看成數(shù)學(xué)意義上的無序和無重復(fù)元素的集合撮执,因此,兩個set可以做數(shù)學(xué)意義上的交集舷丹、并集等操作:
set1 = set(["Java", "Android", "Python", "C"])
set2 = set(["C", "PHP", "IOS", "C#"])
# 兩個集合的并操作抒钱,即返回兩個集合的所有元素,并去掉重復(fù)的集合
print("兩個集合的并操作(union方法)颜凯,結(jié)果為:", set1.union(set2))
print("兩個集合的并操作(|操作符)谋币,結(jié)果為:", set1 | set2)
print("=======================================華麗的分割線=======================================")
# 兩個集合的交操作,即返回兩個集合相同的元素組成的集合
print("兩個集合的交操作(intersection方法)症概,結(jié)果為:", set1.intersection(set2))
print("兩個集合的交操作(&操作符)蕾额,結(jié)果為:", set1 & set2)
print("=======================================華麗的分割線=======================================")
# 兩個集合的差操作,返回只在第一個集合彼城,而不在第二個結(jié)合的元素組成的集合
print("set1在前诅蝶,set2在后的差操作(difference方法)退个,結(jié)果為:", set1.difference(set2))
print("set2在前,set1在后的交操作(-操作符)调炬,結(jié)果為:", set2 - set1)
print("=======================================華麗的分割線=======================================")
# 兩個集合的對稱差操作, 返回不同時存在于兩個集合中的元素組成的集合
print("兩個集合的對稱差操作(symmetric_difference方法)语盈,結(jié)果為:", set1.symmetric_difference(set2))
print("兩個集合的對稱差操作(^操作符),結(jié)果為:", set2 ^ set1)

結(jié)果為:

兩個集合的并操作(union方法)筐眷,結(jié)果為: {'IOS', 'Java', 'Python', 'Android', 'C#', 'PHP', 'C'}
兩個集合的并操作(|操作符)黎烈,結(jié)果為: {'IOS', 'Java', 'Python', 'Android', 'C#', 'PHP', 'C'}
=======================================華麗的分割線=======================================
兩個集合的交操作(intersection方法),結(jié)果為: {'C'}
兩個集合的交操作(&操作符)匀谣,結(jié)果為: {'C'}
=======================================華麗的分割線=======================================
set1在前照棋,set2在后的差操作(difference方法),結(jié)果為: {'Java', 'Python', 'Android'}
set2在前武翎,set1在后的交操作(-操作符)烈炭,結(jié)果為: {'PHP', 'IOS', 'C#'}
=======================================華麗的分割線=======================================
兩個集合的對稱差操作(symmetric_difference方法),結(jié)果為: {'IOS', 'Java', 'Python', 'Android', 'C#', 'PHP'}
兩個集合的對稱差操作(^操作符)宝恶,結(jié)果為: {'IOS', 'Java', 'Python', 'Android', 'C#', 'PHP'}

常用方法

  1. add方法添加元素
tarena_train = set(["Java", "Android", "Python"])
# add方法向集合添加元素符隙,可以添加不同類型的元素,但是必須是不可變的
tarena_train.add("C")
tarena_train.add(1)
print(tarena_train)

結(jié)果為:

{1, 'Android', 'Python', 'C', 'Java'}
  1. update方法添加多個元素
tarena_train = set(["Java", "Android", "Python"])
# update方法向集合添加元素垫毙,可以同時添加多個霹疫,并去重
tarena_train.update(["Java", "C#", "PHP"])
temp = {"Java", "C", ".net"}
tarena_train.update(temp)
print(tarena_train)

結(jié)果為:

{'C#', 'Python', 'Java', 'C', 'Android', 'PHP', '.net'}
  1. remove,pop和discard方法移除元素
tarena_train = set(["Java", "C", "Android", "Python"])
temp = set(["Android", "Java", "Python"])
# remove方法移除元素综芥,無返回值丽蝎,如果元素不存在會報錯
print(tarena_train.remove("Java"))
# pop方法移除元素,返回值為該移除的元素
# 移除的位置是隨機(jī)的膀藐,也就是說同樣的代碼每次執(zhí)行結(jié)果可能不一樣
# 如果集合為空屠阻,則會報錯
print(tarena_train.pop())
# discard方法移除元素,無返回值额各,如果元素不存在不會報錯
print(tarena_train.discard("Android"))
print(tarena_train)

結(jié)果為:

None
C
None
{'Python'}
  1. difference_update刪除多個元素
tarena_train = set(["Java", "Android", "Python"])
tarena_train.update(["Java", "C#", "PHP"])
print(tarena_train)
# difference_update方法是從集合中刪除相同的元素国觉,多用于多個元素刪除
tarena_train.difference_update(["Java", "C#", "PHP"])
print(tarena_train)

結(jié)果為:

{'C#', 'Java', 'Android', 'Python', 'PHP'}
{'Android', 'Python'}

不可變集合

類似于列表和元祖的關(guān)系,Python里也提供了一種不可變集合(frozen set)虾啦。
不可變集合的創(chuàng)建方式和集合差不多麻诀,不過一旦創(chuàng)建,不可改變傲醉,一般作為字典中的key针饥。

# 不可變集合只有frozenset這一種創(chuàng)建方式
android_class = frozenset(["Java", "Android"])
c_class = frozenset(["C", "C++"])
dict_grade = dict([(android_class, "Excellent")])
dict_grade[c_class] = "Normal"
print(dict_grade)

結(jié)果為:

{frozenset({'Android', 'Java'}): 'Excellent', frozenset({'C', 'C++'}): 'Normal'}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市需频,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌筷凤,老刑警劉巖昭殉,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件苞七,死亡現(xiàn)場離奇詭異,居然都是意外死亡挪丢,警方通過查閱死者的電腦和手機(jī)蹂风,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乾蓬,“玉大人惠啄,你說我怎么就攤上這事∪文冢” “怎么了撵渡?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長死嗦。 經(jīng)常有香客問我趋距,道長,這世上最難降的妖魔是什么越除? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任节腐,我火速辦了婚禮,結(jié)果婚禮上摘盆,老公的妹妹穿的比我還像新娘翼雀。我一直安慰自己,他們只是感情好孩擂,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布狼渊。 她就那樣靜靜地躺著,像睡著了一般肋殴。 火紅的嫁衣襯著肌膚如雪囤锉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天护锤,我揣著相機(jī)與錄音官地,去河邊找鬼。 笑死烙懦,一個胖子當(dāng)著我的面吹牛驱入,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播氯析,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼亏较,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了掩缓?” 一聲冷哼從身側(cè)響起雪情,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎你辣,沒想到半個月后巡通,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尘执,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年宴凉,在試婚紗的時候發(fā)現(xiàn)自己被綠了誊锭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡弥锄,死狀恐怖丧靡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情籽暇,我是刑警寧澤温治,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站图仓,受9級特大地震影響罐盔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜救崔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一惶看、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧六孵,春花似錦纬黎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至主巍,卻和暖如春冠息,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背孕索。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工逛艰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人搞旭。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓散怖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親肄渗。 傳聞我的和親對象是個殘疾皇子镇眷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350

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

  • 本節(jié)要介紹的是Python里面常用的幾種數(shù)據(jù)結(jié)構(gòu)铆遭。通常情況下,聲明一個變量只保存一個值是遠(yuǎn)遠(yuǎn)不夠的沿猜,我們需要將一組...
    小黑y99閱讀 65,191評論 0 9
  • 一朋友說順時針轉(zhuǎn)動經(jīng)筒,每轉(zhuǎn)一次就是上天對世人的祝福碗脊。塔爾寺之行至今留給我印象深刻的就是這一排經(jīng)筒啼肩,它像是隨風(fēng)而動...
    攬?jiān)赂绿峁P從戎閱讀 309評論 0 0
  • 當(dāng)我們老了還有多少沒有拾起的稻穗那一粒粒飽滿的日子是你名字的牽掛每天第一件事要做的黎明早起我們?nèi)ゼ新皆诮纸堑搅?..
    道一上人閱讀 621評論 11 60
  • 晚霞映紅了西方的天幕 像我的心不只一次地飛向你 很多時候我們放棄一些東西 致力于那些看上去應(yīng)該做的事 我們以為丟棄...
    雪小凝閱讀 230評論 2 1
  • ThinkPHP 3.2.3快速入門 【目錄列表】簡單一些大概內(nèi)容如下: index.php文件的了解;調(diào)試模式;...
    __沒幾句話閱讀 450評論 0 0