set(),顧名思義,集合,可以用于建立一個無序不重複元素集,功能類似于Java中的HashSet以及C++中的unordered_set。
從清單建立一個集合
s = [2, 1, 4, 3, 5, 2, 1]
s = set(s)
print(s)
輸出:
可以觀察到兩點:原清單内元素的順序被打亂了;重複的元素被去除了。
從字元串建立一個集合
s = "xiongxyowo"
s = set(s)
print(s)
輸出:
建立空集合
s = set()
d = {}
print(type(s))
print(type(d))
輸出:
<class 'set'>
<class 'dict'>
需要注意的是,直接使用花括号建立的是dict(即其他語言中的map)。
添加元素
使用add方法:
s = set()
s.add(2)
s.add(1)
s.add(4)
s.add(2)
print(s)
輸出:
需要注意的是,這個add方法是沒有傳回值的,是以無法據此判斷set中原本是否存在待插入的元素。
删除元素
使用remove方法。不過一般set這種資料結構在應用場景中大多是"隻進不出"的:
s = set()
s.add(2)
s.add(1)
s.add(4)
s.add(2)
s.remove(2)
print(s)
輸出:
如果set中不存在待删除的元素,将會直接報錯。
判斷元素是否在集合中
使用python自帶的in關鍵字:
s = set()
s.add(2)
s.add(1)
s.add(4)
s.add(2)
print(2 in s)
print(3 in s)
輸出:
True
False
集合運算
這也是python的這個set與其他語言中set的最大差別。python支援數學意義上的集合操作,包括交集&,并集|,差集-,補集^:
s1 = set([1, 2, 3])
s2 = set([3, 4, 5])
print(s1 & s2) # 共同元素
print(s1 - s2) # 在s1不在s2
print(s1 | s2) # 在s1或在s2
print(s1 ^ s2) # 僅在s1或僅在s2
輸出:
{3}
{1, 2}
{1, 2, 3, 4, 5}
{1, 2, 4, 5}
例題 [Leetcode 349. 兩個數組的交集]
給定兩個數組 nums1 和 nums2 ,傳回 它們的交集 。輸出結果中的每個元素一定是唯一的。我們可以不考慮輸出結果的順序 。
示例:
輸入:nums1 = [1,2,2,1], nums2 = [2,2]
輸出:[2]
解答:
使用python自帶的集合運算即可一行完成:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
return list(set(nums1) & set(nums2))