天天看點

Python set()函數的簡單用法

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))