1. 程式人生 > 實用技巧 >集合set和frozenset凍結集合函式

集合set和frozenset凍結集合函式

集合set

set和dict類似,也是一組key的集合,但不儲存value。由於key不能重複,所以在set中沒有重複的key。

集合中的元素要求是不可變的並且還是唯一的,我們就利用它是唯一來做去重

set可以看成數學意義上的無序無重複的集合,因此,兩個set可以做數學意義上的交集、並集等操作。

一、集合特點-去重

lst=[1,2,3,2,3,4,2,5,6,2]  #定義列表lst
print(lst)                 #輸出列表
print(set(lst))            #lst轉化為集合輸出(去重)
print(list(set(lst)))      #去重後的集合轉化為列表輸出
結果:
[1, 2, 3, 2, 3, 4, 2, 5, 6, 2]
{1, 2, 3, 4, 5, 6}
[1, 2, 3, 4, 5, 6]

二、集合的基本操作-交集

交集、並集、差集、反交集、子集、超集

set={1,2,3}              #定義集合set
set1={2,3,4}             #定義集合set1
set2=set | set1          #並集-合併集合
set3=set-set1            #差集-set中的單獨元素
set4=set ^ set1          #反交集-兩個集合中的單獨元素
set5=set < set1          #set是set1的子集嗎?輸出布林值
set6=set > set1          #set是set1的超集嗎?輸出布林值
print(set & set1)        #交集-兩個集合中的共有元素
print(set2)
print(set3)
print(set4)
print(set5)
print(set6)
結果:
{2, 3}
{1, 2, 3, 4}
{1}
{1, 4}
False
False

三、集合的增刪改查

1.增加⭐

s = {"羅志祥", '文章', "周星馳"}
s.add("何炅")
print(s)
s.add("何炅")            # 重複的內容不會被新增到set集合中
print(s)
s1 = {"劉德華", '張學友', "張柏芝"}
s1.update("陳冠希")      # 迭代更新
print(s1)
s1.update(["唐韻", "林逸","林逸"])
print(s1)

結果:

{'周星馳', '羅志祥', '何炅', '文章'}
{'周星馳', '羅志祥', '何炅', '文章'}
{'張柏芝', '劉德華', '冠', '張學友', '陳', '希'}
{'張柏芝', '劉德華', '冠', '林逸', '張學友', '陳', '希', '唐韻'}

2.刪除⭐

隨機刪除、指定元素刪除、清空集合

s = {"周星馳", '周星星', "周瑞發","張學友", "楊虎城"}
item = s.pop()       # 隨機彈出⼀個.
print(s)
print(item)
s.remove("周星星")    # 直接刪除元素
# s.remove("劉亦菲")  # 不存在這個元素. 刪除會報錯
print(s)
s.clear()            # 清空set集合.需要注意的是set集合如果是空的. 打印出來是set() 因為要和dict區分的.
print(s)             # set()

結果:

{'周星星', '張學友', '周瑞發', '楊虎城'}
周星馳
{'張學友', '周瑞發', '楊虎城'}
set()

3.修改⭐

set集合中的資料沒有索引. 也沒有辦法去定位⼀個元素. 所以沒有辦法進⾏直接修改.
我們可以採⽤先刪除後新增的⽅式來完成修改操作

s = {'阿斯頓','阿瑟東','阿三的'}
s.remove('阿三的')
s.add('周星星')
print(s)

結果:
{'周星星', '阿瑟東', '阿斯頓'}

4.查詢⭐

# set是⼀個可迭代物件. 所以可以進⾏for迴圈

s = {'阿斯頓','阿瑟東','阿三的'}
for i in s:
 print(i)

結果:
阿斯頓
阿瑟東
阿三的

四、frozenset函式

描述

frozenset() 返回一個凍結的集合,凍結後集合不能再新增或刪除任何元素。

語法

frozenset() 函式語法:

class frozenset([iterable])

引數

  • iterable -- 可迭代的物件,比如列表、字典、元組等等。

返回值

返回新的 frozenset 物件,如果不提供任何引數,預設會生成空集合。

例項

以下例項展示了 frozenset() 的使用方法:

a=frozenset(range(10))                #生成一個新的不可變集合
print(a)
b=frozenset('runoob')                 #建立不可變集合
print(b)
c=frozenset(['終止','啊實打實','阿薩'])  #通過frozenset把集合變得可雜湊(把不可變集合作為字典的key)
print(c)
dic={c:'123'}
print(dic)

結果:
frozenset({0, 1, 2, 3, 4, 5, 6, 7, 8, 9})
frozenset({'r', 'b', 'u', 'o', 'n'})
frozenset({'終止', '啊實打實', '阿薩'})
{frozenset({'終止', '啊實打實', '阿薩'}): '123'}