set(),顾名思义,集合,可以用于创建一个无序不重复元素集,功能类似于Java中的HashSet以及C++中的unordered_set。
从列表创建一个集合
s = [2, 1, 4, 3, 5, 2, 1]
s = set(s)
print(s)
输出:
{1, 2, 3, 4, 5}
可以观察到两点:原列表内元素的顺序被打乱了;重复的元素被去除了。
从字符串创建一个集合
s = "xiongxyowo"
s = set(s)
print(s)
输出:
{'w', 'g', 'x', 'o', 'i', 'n', 'y'}
创建空集合
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)
输出:
{1, 2, 4}
需要注意的是,这个add方法是没有返回值的,因此无法据此判断set中原本是否存在待插入的元素。
删除元素
使用remove方法。不过一般set这种数据结构在应用场景中大多是"只进不出"的:
s = set()
s.add(2)
s.add(1)
s.add(4)
s.add(2)
s.remove(2)
print(s)
输出:
{1, 4}
如果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))