Python入門實踐13 ——集合(Set)
一、目標
1、掌握集合是存放一組沒有順序、不可可重復的、可以改變的數據的容器。
2、掌握集合的操作。
二、要點
1、 集合(set)
可以存放一組沒有順序、不可可重復的、可以改變的數據。
所以一般情況下集合常用的兩個場景是:去重(如:列表去重);關系測試(如:取交集、取并集、取差集等)。
- 集合可以通過可迭代對象(字符串、元組、列表等)進行創建;
- 集合中的元素不可重復;
- 集合中的元素無序排列。
2、創建集合
集合可以使用大括號 { } 或者set(iterable)方法創建,參數iterable為可迭代對象。
注意:創建一個空集合必須用 set() 而不是 { },因為 { } 是用來創建一個空字典。
如:
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'};
s1 = set('好好學習天天想上') # 將字符串分解為單個字符,作為集合的元素創建集合
s2 = set(('好好', '學習', '天天', '想上')) # 將元組分解為單個元素,作為集合元素創建集合
s3 = set(['好好', '學習', '天天', '想上']) # 將列表分解為單個元素,作為集合元素創建集合
3、集合操作
1)、添加元素
(1)、添加單個元素s.add(element)
語法格式如下:
s.add(element);
參數element為集合允許添加的元素(例如數字、字符串、元組等)。
如:
s1.add('4')
(2)、添加多個元素s.update(iterable)
語法格式如下:
s.update(iterable)
參數iterable為可迭代對象,可以是列表,元組,字典等。
如:
s2.update(['4','5','6']) ;
2)、移除元素:
(1)、s.remove( element)
將元素 element 從集合 s 中移除,如果元素不存在,則會發生錯誤 。
(2)、s.discard( element ):
將元素 element 從集合 s 中移除,如果元素不存在,不會發生錯誤,但什么也不做 。
(3)、s.pop():
從集合中隨機刪除一個元素,并返回刪除的元素 。
3)、計算集合中元素的個數
len(s):計算集合 s 元素個數。
4)、清空集合
s.clear():清空集合s中的元素
5)、移除集合
del s:移除集合s
6)、判斷元素是否在集合中
x in s :判斷元素 x是否在集合 s中存在,存在返回 True,不存在返回 False。
7)、交集/并集/補集/差集
操作 | 函數 | 說明 | |
---|---|---|---|
交集 | & | s1.intersection(s2)不更新s1 s1.intersection_update(s2)更新s1 | 獲取兩個集合中共有元素 |
并集 | | | s1.union(s2) | 獲取兩個集合去除重復元素后的全部元素 |
補集 | - | s1.difference(s2) 不更新s1 s1.difference_update(s2) 更新s1 | 獲取當前集合去除與另一集合交集元素后的全部元素。 |
差集 | ^ | s1.ymmetric_difference(s2) 不更新s1 s1.symmetric_difference_update(s2) 更新s1 | 獲取兩個集合去除交集元素后的全部元素。 |
8)、成員關系
Python中提供了一些方法,
- 判斷一個集合中是否包含某一元素;
- 判斷一個集合是否另一個集合的子集或超集。
- 判斷一個集合與另一個集合是否沒有交集。
操作 | 描述 |
---|---|
In | 來判斷操作符前方的值是否被后方的序列包含(成員關系) |
not in | 判斷操作符前方的值是否未被后方的序列包含(非成員關系)。 |
isdisjoint(set) | 可以判斷集合是否與指定集合不存在交集,參數set為集合;如果成立返回結果為True,否則為False。 |
issubset(set) | 可以判斷集合是否指定集合的子集,參數set為集合;如果成立返回結果為True,否則為False。 |
issuperset(set) | 可以判斷集合是否指定集合的超集,參數set為集合;如果成立返回結果為True,否則為False。 |
9)、復制集合
使用copy()方法能夠對集合進行復制。
4、集合內置方法
方法 | 描述 |
---|---|
add() | 為集合添加元素 |
clear() | 移除集合中的所有元素 |
copy() | 拷貝一個集合 |
difference() | 返回多個集合的差集 |
difference_update() | 移除集合中的元素,該元素在指定的集合也存在。 |
discard() | 刪除集合中指定的元素 |
intersection() | 返回集合的交集 |
intersection_update() | 返回集合的交集。 |
isdisjoint() | 判斷兩個集合是否包含相同的元素,如果沒有返回 True,否則返回 False。 |
issubset() | 判斷指定集合是否為該方法參數集合的子集。 |
issuperset() | 判斷該方法的參數集合是否為指定集合的子集 |
pop() | 隨機移除元素 |
remove() | 移除指定元素 |
symmetric_difference() | 返回兩個集合中不重復的元素集合。 |
symmetric_difference_update() | 移除當前集合中在另外一個指定集合相同的元素,并將另外一個指定集合中不同的元素插入到當前集合中。 |
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('好好學習天天想上') ; # 將字符串分解為單個字符,作為集合的元素創建集合
s2 = set(('好好', '學習', '天天', '想上')); # 將元組分解為單個元素,作為集合元素創建集合
s3 = set(['好好', '學習', '天天', '想上']) ; # 將列表分解為單個元素,作為集合元素創建集合
print (s1); # 顯示輸出結果為:{'好', '習', '上', '天', '想', '學'}
print (s2) ; # 顯示輸出結果為:{'好好', '想上', '學習', '天天'}
print (s3); # 顯示輸出結果為:{'好好', '想上', '學習', '天天'}
# 添加單個元素
s1.add('4');
# 添加多個元素
s2.update(['4','5','6']); # 添加列表到集合,列表元素會被分解為單個元素后添加到集合
s3.update('de') ; # 添加字符串到集合,字符串會被分解為單個元素后添加到集合
# 顯示輸出
print (s1) ;
print (s2) ;
print (s3) ;
# 創建集合
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()) # 取出集合元素
# 創建集合
s1 = set('Python')
s2 = set('PyCharm')
# 交集操作:獲取兩個集合中共有元素。
print (s1 & s2) # 顯示輸出結果為:{'y', 'P', 'h'}
print (s1.intersection(s2)) # 顯示輸出結果為:{'y', 'P', 'h'}
# 并集操作:獲取兩個集合去除重復元素后的全部元素。
print (s1 | s2) # 顯示輸出結果為:{'y', 'a', 'C', 'o', 'P', 'n', 't', 'm', 'r', 'h'}
print (s1.union(s2)) # 顯示輸出結果為:{'y', 'a', 'C', 'o', 'P', 'n', 't', 'm', 'r', 'h'}
# 補集操作:獲取當前集合去除與另一集合交集元素后的全部元素。
print (s1 - s2) # 顯示輸出結果為:{'o', 't', 'n'}
print (s1.difference(s2)) # 顯示輸出結果為:{'o', 't', 'n'}
print (s2 - s1) # 顯示輸出結果為:{'m', 'a', 'r', 'C'}
print (s2.difference(s1)) # 顯示輸出結果為:{'m', 'a', 'r', 'C'}
# 差集操作:獲取兩個集合去除交集元素后的全部元素。
print (s1 ^ s2) # 顯示輸出結果為:{'o', 't', 'm', 'a', 'r', 'n', 'C'}
print (s1.symmetric_difference(s2)) # 顯示輸出結果為:{'o', 't', 'm', 'a', 'r', 'n', 'C'}
s1 = set('好好學習')
s2 = set('天天想上')
s3 = set('好好學習天天想上')
print ('好' in s1) # 顯示輸出結果為:True
print ('好' not in s2) # 顯示輸出結果為:True
print (s1.isdisjoint(s2)) # 顯示輸出結果為:True
print (s1.issubset(s3)) # 顯示輸出結果為:True
print (s3.issuperset(s1)) # 顯示輸出結果為:True
a = set('小樓一夜聽春語') # 創建集合存入變量a
b = a # 創建變量b引用變量a的集合
c = a.copy() # 創建變量c復制變量a的值
print (a) # 顯示輸出結果為:{'春', '夜', '樓', '聽', '語', '小', '一'}
print (b) # 顯示輸出結果為:{'春', '夜', '樓', '聽', '語', '小', '一'}
print (c) # 顯示輸出結果為:{'春', '夜', '樓', '聽', '語', '小', '一'}
print(dir(set));
五、運行輸出:
{'banana', 'pear', 'orange', 'apple'}
{'學', '上', '想', '天', '好', '習'}
{'天天', '想上', '學習', '好好'}
{'天天', '想上', '學習', '好好'}
{'學', '上', '想', '天', '好', '習', '4'}
{'天天', '想上', '學習', '5', '6', '4', '好好'}
{'天天', '想上', 'e', '學習', '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、撰寫內容來源于個人收集的文獻,屬學術探究范疇。
2、版權屬于時進軍個人,轉載需注明。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
