在python變量中除了以前文章所提到的整形int / 浮點數float / 布爾值bool / 列表list / 字典dict 之外,還有一個類型我們還沒有做詳細介紹,這個變量類型就是集合set。
一.set集合簡介
python set集合使用大括號 { }表示,與字典dict不同的是set集合並沒有key/value鍵值對,主要有以下兩個特點:
1.元素不允許重複
2.set 不記錄元素的添加順序,即是無序的,和字典類似
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | # !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:何以解憂 @Blog(個人博客地址): shuopython.com @WeChat Official Account(微信公衆號):猿說python @Github:www.github.com
@File:python_set.py @Time:2019/11/09 21:25
@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累! """
# 創建一個空集合set set_a = set() # 打印集合set print(set_a) # 查看類型 print(type(set_a)) print("***"*20)
# 創建一個集合 set_b = {"猿說python",False} print(type(set_b)) print(set_b) print("***"*20)
# 創建一個字典 dict_b = {"name":"猿說python","url":"www.shuopython.com"} print(type(dict_b)) print(dict_b) |
輸出結果:
1 2 3 4 5 6 7 8 | set() <class 'set'> ************************************************************ <class 'set'> {False, '猿說python'} ************************************************************ <class 'dict'> {'name': '猿說python', 'url': 'www.shuopython.com'} |
代碼分析:觀察上面代碼,雖然字典dict 和 集合set 都是由{}構成,注意字典由鍵值對key/value構成,而集合確是由一個一個數據構成,和列表的元素類似!
二.set集合常用函數
add() — 向 set 集合中添加元素;
remove() — 刪除元素,如果集合中不包含被刪除的元素,remove() 方法會報出 KeyError 異常;
discard() — 刪除元素,如果集合中不包含被刪除的元素,不會有任何提示或者 異常;
clear() — 就是清空白 set 集合;
copy() — 拷貝一個集合;
difference() — 返回多個集合的差集;
difference_update() — 移除集合中的元素,該元素在指定的集合也存在;
intersection() — 返回集合的交集,不改變集合本身,而是返回兩個集合的交集;
intersection_update() — 返回集合的交集,會通過交集運算改變第一個集合;
isdisjoint() — 判斷兩個集合是否包含相同的元素,如果沒有返回 True,否則返回 False;
issubset() — 判斷指定集合是否爲該方法參數集合的子集;
issuperset() — 判斷該方法的參數集合是否爲指定集合的子集;
pop() — 隨機移除元素;
symmetric_difference() — 移除當前集合中在另外一個指定集合相同的元素,並將另外一個指定集合中不同的元素插入到當前集合中;
union() — 返回兩個集合的並集;
update() — 用於修改當前集合,可以添加新的元素或集合到當前集合中,如果添加的元素在集合中已存在,則該元素只會出現一次,重複的會忽略;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | # 使用花括號構建set集合 c = {'喬峯',"段譽","虛竹","天龍八部","射鵰英雄傳"} # 添加元素 c.add("天山姥姥") c.add(6) print("c集合的元素個數爲:" , len(c)) print(c) # 刪除指定元素 c.remove("天山姥姥") print(c) print("c集合的元素個數爲:" , len(c)) print("***"*20)
# 判斷是否包含指定字符串 print("c集合是否包含'喬峯'字符串:" , ("喬峯" in c)) # 輸出True print("***"*20)
# 使用set()函數(構造器)來創建set集合 movies = set() movies.add("天龍八部") movies.add("射鵰英雄傳") print("movies集合的元素:" , movies) # issubset()方法判斷是否爲子集合 print("movies集合是否爲c的子集合?", movies.issubset(c)) # 輸出False
# issuperset()方法判斷是否爲父集合 # issubset和issuperset其實就是倒過來判斷 print("c集合是否完全包含books集合?", c.issuperset(movies)) # 輸出False # 用c集合減去books集合裏的元素,不改變c集合本身 result1 = c - movies print(result1)
# difference()方法也是對集合做減法,與用-執行運算的效果完全一樣 result2 = c.difference(movies) print(result2)
# 用c集合減去books集合裏的元素,改變c集合本身 c.difference_update(movies) print("c集合的元素:" , c)
# 刪除c集合裏的所有元素 c.clear() print("c集合的元素:" , c) print("***"*20)
# 直接創建包含元素的集合 d = {"python面向對象", 'python基礎', 'python爬蟲'} print("d集合的元素:" , d)
# intersection()方法也是獲取兩個集合的交集,與用&執行運算的效果完全一樣 inter2 = d.intersection(movies) print(inter2) # 計算兩個集合的交集,改變d集合本身 d.intersection_update(movies) print("d集合的元素:" , d) print("***"*20)
# 將range對象包裝成set集合 e = set(range(5)) f = set(range(3, 7)) print("e集合的元素:" , e) print("f集合的元素:" , f)
# 計算兩個集合的並集,不改變e集合本身 un = e.union(f) print('e和f執行並集的結果:', un) # 計算兩個集合的並集,改變e集合本身 e.update(f) print('e集合的元素:', e) |
輸出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | c集合的元素個數爲: 7 {'天龍八部', 6, '虛竹', '喬峯', '段譽', '天山姥姥', '射鵰英雄傳'} {'天龍八部', 6, '虛竹', '喬峯', '段譽', '射鵰英雄傳'} c集合的元素個數爲: 6 ************************************************************ c集合是否包含'喬峯'字符串: True ************************************************************ movies集合的元素: {'天龍八部', '射鵰英雄傳'} movies集合是否爲c的子集合? True c集合是否完全包含books集合? True {'喬峯', '段譽', 6, '虛竹'} {'喬峯', '段譽', 6, '虛竹'} c集合的元素: {6, '虛竹', '喬峯', '段譽'} c集合的元素: set() ************************************************************ d集合的元素: {'python爬蟲', 'python基礎', 'python面向對象'} set() d集合的元素: set() ************************************************************ e集合的元素: {0, 1, 2, 3, 4} f集合的元素: {3, 4, 5, 6} e和f執行並集的結果: {0, 1, 2, 3, 4, 5, 6} e集合的元素: {0, 1, 2, 3, 4, 5, 6} |
三.set集合運算符
<=:相當於調用 issubset() 方法,判斷前面的 set 集合是否爲後面的 set 集合的子集合。
>=:相當於調用 issuperset() 方法,判斷前面的 set 集合是否爲後面的 set 集合的父集合。
–:相當於調用 difference() 方法,用前面的 set 集合減去後面的 set 集合的元素。
&:相當於調用 intersection() 方法,用於獲取兩個 set 集舍的交集。
^:計算兩個集合異或的結果,就是用兩個集合的並集減去交集的元素。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | # 使用花括號構建set集合 c = {'喬峯',"段譽","虛竹","天龍八部","射鵰英雄傳"}
# 使用set()函數(構造器)來創建set集合 movies = set() movies.add("天龍八部") movies.add("射鵰英雄傳") print("movies集合的元素:" , movies) # issubset()方法與<=運算符效果相同 print("movies集合是否爲c的子集合?", (movies <= c)) # 輸出False print("***"*20)
e = set(range(5)) f = set(range(3, 7)) print("e集合的元素:" , e) print("f集合的元素:" , f) # 對兩個集合執行異或運算 xor = e ^ f print('e和f執行xor的結果:', xor)
# 直接創建包含元素的集合 d = {"python面向對象", 'python基礎', 'python爬蟲'} print("d集合的元素:" , d) # 計算兩個集合的交集,不改變d集合本身 inter1 = d & movies print(inter1) |
輸出結果:
1 2 3 4 5 6 7 8 | movies集合的元素: {'天龍八部', '射鵰英雄傳'} movies集合是否爲c的子集合? True ************************************************************ e集合的元素: {0, 1, 2, 3, 4} f集合的元素: {3, 4, 5, 6} e和f執行xor的結果: {0, 1, 2, 5, 6} d集合的元素: {'python基礎', 'python面向對象', 'python爬蟲'} set() |
猜你喜歡:
轉載請註明:猿說Python » python set集合