在python變量中除了以前文章所提到的整形int / 浮點數(shù)float / 布爾值bool / 列表list / 字典dict 之外,還有一個類型我們還沒有做詳細(xì)介紹,這個變量類型就是集合set。
創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)服務(wù)商,為中小企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站建設(shè)、
成都外貿(mào)網(wǎng)站建設(shè)服務(wù),網(wǎng)站設(shè)計,
網(wǎng)站托管等一站式綜合服務(wù)型公司,專業(yè)打造企業(yè)形象網(wǎng)站,讓您在眾多競爭對手中脫穎而出
創(chuàng)新互聯(lián)公司。
一.set集合簡介
python set集合使用大括號 { }表示,與字典dict不同的是set集合并沒有key/value鍵值對,主要有以下兩個特點:
1.元素不允許重復(fù)
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:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!
"""
# 創(chuàng)建一個空集合set
set_a=set()
# 打印集合set
print(set_a)
# 查看類型
print(type(set_a))
print("***"*20)
# 創(chuàng)建一個集合
set_b={"猿說python",False}
print(type(set_b))
print(set_b)
print("***"*20)
# 創(chuàng)建一個字典
dict_b={"name":"猿說python","url":"www.shuopython.com"}
print(type(dict_b))
print(dict_b)
輸出結(jié)果:
1 2 3 4 5 6 7 8 | set()
************************************************************
{False,'猿說python'}
************************************************************
{'name':'猿說python','url':'www.shuopython.com'}
代碼分析:觀察上面代碼,雖然字典dict 和 集合set 都是由{}構(gòu)成,注意字典由鍵值對key/value構(gòu)成,而集合確是由一個一個數(shù)據(jù)構(gòu)成,和列表的元素類似!
二.set集合常用函數(shù)
add() — 向 set 集合中添加元素;
remove() — 刪除元素,如果集合中不包含被刪除的元素,remove() 方法會報出 KeyError 異常;
discard() — 刪除元素,如果集合中不包含被刪除的元素,不會有任何提示或者 異常;
clear() — 就是清空白 set 集合;
copy() — 拷貝一個集合;
difference() — 返回多個集合的差集;
difference_update() — 移除集合中的元素,該元素在指定的集合也存在;
intersection() — 返回集合的交集,不改變集合本身,而是返回兩個集合的交集;
intersection_update() — 返回集合的交集,會通過交集運算改變第一個集合;
isdisjoint() — 判斷兩個集合是否包含相同的元素,如果沒有返回 True,否則返回 False;
issubset() — 判斷指定集合是否為該方法參數(shù)集合的子集;
issuperset() — 判斷該方法的參數(shù)集合是否為指定集合的子集;
pop() — 隨機移除元素;
symmetric_difference() — 移除當(dāng)前集合中在另外一個指定集合相同的元素,并將另外一個指定集合中不同的元素插入到當(dāng)前集合中;
union() — 返回兩個集合的并集;
update() — 用于修改當(dāng)前集合,可以添加新的元素或集合到當(dāng)前集合中,如果添加的元素在集合中已存在,則該元素只會出現(xiàn)一次,重復(fù)的會忽略;
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 | # 使用花括號構(gòu)建set集合
c={'喬峰',"段譽","虛竹","天龍八部","射雕英雄傳"}
# 添加元素
c.add("天山姥姥")
c.add(6)
print("c集合的元素個數(shù)為:",len(c))
print(c)
# 刪除指定元素
c.remove("天山姥姥")
print(c)
print("c集合的元素個數(shù)為:",len(c))
print("***"*20)
# 判斷是否包含指定字符串
print("c集合是否包含'喬峰'字符串:",("喬峰"inc))# 輸出True
print("***"*20)
# 使用set()函數(shù)(構(gòu)造器)來創(chuàng)建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()方法也是對集合做減法,與用-執(zhí)行運算的效果完全一樣
result2=c.difference(movies)
print(result2)
# 用c集合減去books集合里的元素,改變c集合本身
c.difference_update(movies)
print("c集合的元素:",c)
# 刪除c集合里的所有元素
c.clear()
print("c集合的元素:",c)
print("***"*20)
# 直接創(chuàng)建包含元素的集合
d={"python面向?qū)ο?,'python基礎(chǔ)','python爬蟲'}
print("d集合的元素:",d)
# intersection()方法也是獲取兩個集合的交集,與用&執(zhí)行運算的效果完全一樣
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執(zhí)行并集的結(jié)果:',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集合的元素個數(shù)為:7
{'天龍八部',6,'虛竹','喬峰','段譽','天山姥姥','射雕英雄傳'}
{'天龍八部',6,'虛竹','喬峰','段譽','射雕英雄傳'}
c集合的元素個數(shù)為:6
************************************************************
c集合是否包含'喬峰'字符串:True
************************************************************
movies集合的元素:{'天龍八部','射雕英雄傳'}
movies集合是否為c的子集合?True
c集合是否完全包含books集合?True
{'喬峰','段譽',6,'虛竹'}
{'喬峰','段譽',6,'虛竹'}
c集合的元素:{6,'虛竹','喬峰','段譽'}
c集合的元素:set()
************************************************************
d集合的元素:{'python爬蟲','python基礎(chǔ)','python面向?qū)ο?#39;}
set()
d集合的元素:set()
************************************************************
e集合的元素:{0,1,2,3,4}
f集合的元素:{3,4,5,6}
e和f執(zhí)行并集的結(jié)果:{0,1,2,3,4,5,6}
e集合的元素:{0,1,2,3,4,5,6}
三.set集合運算符
<=:相當(dāng)于調(diào)用 issubset() 方法,判斷前面的 set 集合是否為后面的 set 集合的子集合。
>=:相當(dāng)于調(diào)用 issuperset() 方法,判斷前面的 set 集合是否為后面的 set 集合的父集合。
–:相當(dāng)于調(diào)用 difference() 方法,用前面的 set 集合減去后面的 set 集合的元素。
&:相當(dāng)于調(diào)用 intersection() 方法,用于獲取兩個 set 集舍的交集。
^:計算兩個集合異或的結(jié)果,就是用兩個集合的并集減去交集的元素。
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 | # 使用花括號構(gòu)建set集合
c={'喬峰',"段譽","虛竹","天龍八部","射雕英雄傳"}
# 使用set()函數(shù)(構(gòu)造器)來創(chuàng)建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)
# 對兩個集合執(zhí)行異或運算
xor=e^f
print('e和f執(zhí)行xor的結(jié)果:',xor)
# 直接創(chuàng)建包含元素的集合
d={"python面向?qū)ο?,'python基礎(chǔ)','python爬蟲'}
print("d集合的元素:",d)
# 計算兩個集合的交集,不改變d集合本身
inter1=d&movies
print(inter1)
輸出結(jié)果:
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執(zhí)行xor的結(jié)果:{0,1,2,5,6}
d集合的元素:{'python基礎(chǔ)','python面向?qū)ο?#39;,'python爬蟲'}
set()
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
文章題目:pythonset集合介紹-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:
http://weahome.cn/article/djsohj.html