日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python的集合set

發布時間:2025/3/20 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python的集合set 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
set是python中一個無序無重復元素的數據結構。無序,是因為set采用了hash技術進行元素的存儲;無重復元素,本身就是set區別其他數據結構的一個重要特點,也是set之間能夠進行并,交,差等各種集合運算的基礎。set主要有兩大類的操作。 (1)set本身的操作 1.初始化 s0 = {1, 2, 3}
s1 = set()
s2 = set('set')
s3 = set([1, 2, 3])
s4 = set((1, 2, 3))
print(s0, s1, s2, s3, s4, sep='\n') 輸出結果:{1,?2,?3}set(){'s',?'t',?'e'}{1,?2,?3}{1,?2,?3} 注意:set與dict一樣使用{}來表示,但s={}創建的是空dict,不是創建空set。創建一個空set需要使用s=set()。 字符串str、列表list、元組tuple可以直接轉換成set。 2.新增元素add和update s = {1, 2, 'a', 5, 'b'}
s.add(7)
print(s)
s.add('a')
print(s)
s.add('ab')
print(s) 輸出結果:{1,?2,?5,?'a',?7,?'b'}{1,?2,?5,?'a',?7,?'b'}{1,?2,?5,?'a',?7,?'ab',?'b'} 可以看出:1)如果新增的元素在原set已存在,則什么都不發生。2)add只是增加一個元素,所以即使一個字符串含有多個字符,也不會像初始化那樣進行拆分。3)添加結果是無序的,并不一定是添加到尾部。 a = {1, 2, 3, 'a', 'b', 'c'}
b = 'xyz'
c = {'xyz', 'abc'}
a.update(b)
print(a)
a.update(c)
print(a) 輸出結果:{'b',?1,?2,?3,?'a',?'x',?'z',?'y',?'c'}{'b',?1,?2,?3,?'xyz',?'a',?'abc',?'x',?'z',?'y',?'c'}
可以看出:1)update是批量的添加多個元素或集合;2)添加結果是無序的,并非是添加到尾部。 3.刪除元素remove/discard/pop/clear s = {1, 2, 3, 'a', 'b', 'c'}
s.remove(1)
print(s)
s.discard('a')
print(s)
s.pop()
print(s)
s.clear()
print(s) 輸出結果:{2,?3,?'c',?'a',?'b'}{2,?3,?'c',?'b'}{3,?'c',?'b'}set() 刪除元素有remove,discard,pop,clear操作。可以看出,clear是清空集合,使得集合重置為空; pop是任意選一個元素刪除,并返回這個元素的值,clear和pop都沒有輸入參數;remove和discard都是刪除一個指定的元素,區別是如果該元素不存在集合中,則remove會報錯。 (2)set與set之間的操作:并集、交集、差集等 set是集合的數據結構,集合也是數學中的重要概念,并集、交集、差集等是集合的基本運算。 1.并集union

union()返回兩個集合的并集。 s1 = {1, 2, 3, 4, 5, 6, 7}
s2 = {6, 7, 8, 9, 10, 11, 12}
print(s1.union(s2))
print(s2.union(s1))
print(s1 | s2) 輸出結果:{1,?2,?3,?4,?5,?6,?7,?8,?9,?10,?11,?12}{1,?2,?3,?4,?5,?6,?7,?8,?9,?10,?11,?12}{1,?2,?3,?4,?5,?6,?7,?8,?9,?10,?11,?12} 可以看出:A.union(B)==B.union(A)==A|B==B|A 2.交集intersection
s1 = {1, 2, 3, 4, 5, 6, 7}
s2 = {6, 7, 8, 9, 10, 11, 12}
print(s1.intersection(s2))
print(s2.intersection(s1))
print(s1 & s2) 輸出結果:{6,?7}{6,?7}{6,?7} 可以看出:A.intersection(B)==B.intersection(A)==A&B==B&A
3.差集difference
s1 = {1, 2, 3, 4, 5, 6, 7}
s2 = {6, 7, 8, 9, 10, 11, 12}
print(s1.difference(s2))
print(s2.difference(s1))
print(s1 - s2)
print(s2 - s1) 輸出結果:{1,?2,?3,?4,?5}{8,?9,?10,?11,?12}{1,?2,?3,?4,?5}{8,?9,?10,?11,?12} 可以看出:1)A.difference(B) 不等于 B.difference(A),從上圖中也可以看出來;2)difference可以使用“-”減號代替。 4.對稱差集symmetric_difference
在集合A或集合B中,但又不同時在集合A和集合B中。 s1 = {1, 2, 3, 4, 5, 6, 7}
s2 = {6, 7, 8, 9, 10, 11, 12}
print(s1.symmetric_difference(s2))
print(s2.symmetric_difference(s1))
print(s1 ^ s2)
print(s2 ^ s1) 輸出結果:{1,?2,?3,?4,?5,?8,?9,?10,?11,?12}{1,?2,?3,?4,?5,?8,?9,?10,?11,?12}{1,?2,?3,?4,?5,?8,?9,?10,?11,?12}{1,?2,?3,?4,?5,?8,?9,?10,?11,?12} 5.子集issubset,超集issuperset 判斷一個集合是否是另一個集合的子集或超集,可以使用符號‘<=’,‘>’。 s1 = {1, 2, 3, 4, 5, 6, 7}
s2 = {6, 7, 8, 9, 10, 11, 12}
s3 = {1, 2, 3}
s4 = {1, 2, 3}
print(s1.issubset(s2))
print(s3.issubset(s1))
print(s1.issuperset(s3))
print(s4 <= s3)
print(s1 > s3) 輸出結果:FalseTrueTrueTrueTrue (3)set的一些重要特點
除了可以進行并、交、差等集合運算外,set還有一些其他特點。 1.初始化時的元素必須是hashable的類型 s = {1, 2, [3, 4, 5]} TypeError:?unhashable?type:?'list' 初始化時,其中有一個列表[3,4,5],列表是unhashable type,因此報錯。 s = {1, 2, (3, 4, 5), 'abc'}
print(s) {'abc',?(3,?4,?5),?2,?1} 元組、字符串等hashable類型是可以的。 2.不支持索引index和切片slice操作 set是一個無序的數據結構,沒有位置的概念,因此不支持通常的序列索引和切片操作。所有意圖進行indexing和slice的操作都將報錯。 3.可以用于去除重復元素 s = {1, 1, 1, 2, 3, 4, 5, 2, 2, 3, 3, 4, 5, 5}
s = list(set(s))
print(s) 輸出結果:[1,?2,?3,?4,?5] 4.set的in或not in查詢操作非常快 set使用hash技術進行元素的存儲,因此其查詢操作時間復雜度是O(1)的,遠遠高于列表的O(N)復雜度。 import time
st = time.clock()
N = 50000
arr = [i for i in range(N)]
A = [i for i in range(N) if i % 2 == 0]
B = [i for i in range(N) if i % 2 == 1]
count = 0
for x in arr:
if x in A:
count += 1
elif x in B:
count -= 1
print(count)
print(time.clock() - st) 輸出結果:023.8880947819304 耗時近24秒。如果把A、B轉換成set,進行同樣的運算: import time
st = time.clock()
N = 50000
arr = [i for i in range(N)]
A = set([i for i in range(N) if i % 2 == 0])
B = set([i for i in range(N) if i % 2 == 1])
count = 0
for x in arr:
if x in A:
count += 1
elif x in B:
count -= 1
print(count)
print(time.clock() - st) 輸出結果:00.03624072844963256 耗時0.03624秒,list是set耗時的660倍。因此,當需要對一個無重復元素數據集頻繁進行查詢操作時,使用set是一個很好的選擇。

總結

以上是生活随笔為你收集整理的Python的集合set的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。