首頁 > 軟體

Python集合set()使用的方法詳解

2022-03-18 19:00:39

在python3中按資料型別的可變與不可變大致分為如下幾種型別:

  • 不可變資料(3個):Number(數位)、String(字串)、Tuple(元組);
  • 可變資料(3個):List(列表)、Dictionary(字典)、Set(集合)。

1.集合的特點

1.無序不重複沒有重複的元素,且元素無序存放(故集合沒有下標和切片),set的只要作用就是用來給資料去重。

2.使用時為 { },與字典區分:當花括號裡的元素不是鍵值對的時候為集合。

3.集合的底層其實是通過字典來封裝的

2.set的建立

可以使用大括號 { } 或者 set() 函數建立集合,但是注意如果建立一個空集合必須用 set() 而不是 { },因為{}是用來表示空字典型別的。

1.用set()函數建立set集合

person2 = set(("hello","jerry",133,11,133,"jerru")) #只能傳入一個引數,可以是list,tuple等 型別
print(len(person2))
print(person2)
'''
5
{133, 'jerry', 11, 'jerru', 'hello'}
'''

2.add()

a=set()
a.add("a")
a.add("b")
print(a)

3.用{}建立set集合。空set集合用set()函數表示,不可a={}。

person ={"student","teacher","babe",123,321,123} #同樣各種型別巢狀,可以賦值重複資料,但是儲存會去重
print(len(person))  #存放了6個資料,長度顯示是5,儲存是自動去重
print(person) #但是顯示出來則是去重的
'''
5
{321, 'teacher', 'student', 'babe', 123}
'''
#空set集合用set()函數表示
person1 = set() #表示空set,不能用person1={}
print(len(person1))
print(person1)
'''
0
set()
'''

4.set集合的轉化

a=["awe","weg","dawqgg"]
c=set(a)
print(c)
b="chenshuagege"
d=set(b)
print(d)
al=("233","34455")
aw=set(al)
print(al)

3.常見使用注意事項

#set對字串也會去重,因為字串屬於序列。
str1 = set("abcdefgabcdefghi")
str2 = set("abcdefgabcdefgh")
print(str1,str2)
print(str1 - str2) #-號可以求差集
print(str2 - str1)  #空值
#print(str1 + str2)  #set裡不能使用+號
====================================================================
{'d', 'i', 'e', 'f', 'a', 'g', 'b', 'h', 'c'} {'d', 'e', 'f', 'a', 'g', 'b', 'h', 'c'}
{'i'}
set()

4.set的常用方法

4.1 set集合的增刪改查操作

  • add 用於加入元素
  • update 用於集合的合併
  • remove 當移除一個集合裡沒有的元素時,報錯
  • discard 當移除一個集合裡沒有的元素時,不會報錯
  • del 僅可對集合本身使用,不可用於元素,因為元素在集合裡為混亂排放,無下標
  • clear 清空集合,留下空集合
  • pop 隨機刪除集合裡的一個元素
#1.給set集合增加資料
person ={"student","teacher","babe",123,321,123}
person.add("student") #如果元素已經存在,則不報錯,也不會新增,不會將字串拆分成多個元素,區別update
print(person)
person.add((1,23,"hello")) #可以新增元組,但不能是list
print(person)
'''
{321, 'babe', 'teacher', 'student', 123}
{(1, 23, 'hello'), 321, 'babe', 'teacher', 'student', 123}
'''
# update用於集合的合併,可以把多個集合新增到一個集合裡面。可以iterar的資料都可以新增成set集合
person.update("abc")#使用update不能新增字串,會拆分
print(person)  #會將字串拆分成a,b,c三個元素
'''
{321, 1, 3, 'b', 'c', 'teacher', (1, 23, 'hello'), 'a', 'babe', 'student', 123}
'''
set1 = set()
set1.add('武動乾坤')
set2 = {'jsy', '稻香', '愛的代價', '大碗寬面'}
set2.update(set1)
print(set2)
'''
{'大碗寬面', 'jsy', '愛的代價', '稻香', '武動乾坤'}
'''
#2.從set裡刪除資料
person.remove("student")#按元素去刪除
print(person)
#print("student")如果不存在 ,會報錯。
'''
{321, 1, 3, 'c', 'b', (1, 23, 'hello'), 'teacher', 'babe', 'a', 123}
'''
person.discard("student")#功能和remove一樣,好處是沒有的話,不會報錯
ret = person.pop() #在list裡預設刪除最後一個,在set裡隨機刪除一個。
print(person)
print(ret) #pop()返回的是被刪除掉的那一項
'''
{1, 3, (1, 23, 'hello'), 'teacher', 'b', 'a', 'babe', 123, 'c'}
'''
#3.更新set中某個元素,因為是無序的,所以不能用角標
#所以一般更新都是使用remove,然後在add
#4.查詢是否存在,無法返回索引,使用in判斷
if "teacher" in person:
    print("true")
else:
    print("不存在")
'''
true
'''
#5.終極大招:直接清空set
print(person)
person.clear()
print(person)
'''
set()
'''

4.2 其它用法

交 並 差集操作交集 intersection;並集 union;差集 difference
可用運運算元表示交集,並集,差集交集 & 並集 | 差集 -

#取兩者的交集
b={1,23}
a={23,5}
ret=b.intersection(a)
print(ret)
#取兩者的交集,intersection_update會改變b的內容
b={1,23}
a={23,5}
b.intersection_update(a)
print(b)
#union是把兩個set集合合起來
a={"a","b","c"}
b={"a","wa"}
wt=a.union(b)
print(wt)
#difference表示的意思是a中的內容b是沒有的,但是這個不會修改a自身的值,而是付給ret了
a={"12","14","234"}
b={"12","23"}
ret=a.difference(b)
print(ret)
#difference_update表示的意思是a中的內容b是沒有的,執行完,會修改a的內容
a={"12","14","234"}
b={"12","23"}
a.difference_update(b)
print(a)
#symmetric_difference為把兩個set集合裡相同的內容當作邊然後取這邊兩邊的內容
a={"a","b","c"}
b={"a","wa"}
ret=a.symmetric_difference(b)
print(ret)
a.symmetric_difference(b)
print(a)
#可用運運算元表示交集,並集,差集
set2 = {1, 2, 3, 4, 5}
set3 = {3, 4, 5, 6, 7, 8, 9} 
print(set2 & set3)  # 交集符號  &
print(set2 | set3)  # 並集符號 |
print(set2 - set3)  # 差集符號 -
b={1,23}
a={23,5}
#如果a與b有集合的話,就返回false;如果沒有集合的話,就返回true
ret=b.isdisjoint(a)
print(ret)
b={1,23,5}
a={23,5}
#issuperset說明b是否是a的父親,如果是就輸出true,如果不是輸出false
ret=b.issuperset(a)
print(ret)
b={1,23,5}
a={23,5}
#b是否是a的子,如果是就輸出true,如果不是就輸出false
ret=b.issubset(a)
print(ret)

5.列表,元組,字典,集合 

  • list: 允許重複,有序,有下標,可切片
  • tuple: 允許重複,裡面元素不能進行增刪改,只能檢視
  • dict: 字典裡的元素以鍵值對的形式存在 鍵:唯一性 值:可以重複
  • set: 元素不允許重複,且具有無序性

5.1 它們之間的型別轉換

1.列表,元組,集合,此三者均可相互轉

list----->tuple,set 列表轉集合時,注意不能有重複元素,否則長度改變

tuple----->list,set

set----->list,tuple

2.當字典參與的轉換時,需特殊對待

dict----->list,tuple 僅能將字典的鍵轉換,不能將值轉換

list----->dict 列表內必須是列表或是元組,且其中只有兩個元素時,可轉

list = [['a', {1}], ('', 2), ('c', 3)]
print(dict(list))

輸出:

{‘a’: {1}, ‘’: 2, ‘c’: 3}

5.2 集合和列表方法上的區別

正是由於集合的無序性,沒有下標,故在方法上與列表有些差異。

  • append(新增元素) extend(實現列表的拼接)
  • insert(在某一下標插入元素) ----->listadd(新增元素) update(兩個集合的合併) ---->set

總結

本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注it145.com的更多內容! 


IT145.com E-mail:sddin#qq.com