Python入門實踐13 ——集合(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() | 給集合添加元素 |
三诬辈、步驟
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)載需注明。