集合(set)是一个无序的不重复元素序列。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
集合与之前列表、元组类似,可以存储多个数据,但是这些数据是不重复的。
集合对象还支持交集(intersection),差集(difference)、并集(union)和对称差集(sysmmetric_difference)集合没有顺序
交集:(a&b) (intersection) #公共部分
并集:(a|b) (union)#没有重复的
差集:(a-b) (difference) #只有 a 项有,b项没有
对称差集:(a^b) (sysmmetric_difference) #只在 x 或 y 中,但是不会同时出现在二者中
>>>basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'} >>> print(basket) # 这里演示的是去重功能 {'orange', 'banana', 'pear', 'apple'} >>> 'orange' in basket # 快速判断元素是否在集合内 True >>> 'crabgrass' in basket False
>>> # 下面展示两个集合间的运算. >>> a = set('abracadabra') >>> b = set('alacazam') >>> a {'a', 'r', 'b', 'c', 'd'} >>> a - b 差集 # 返回集合a中包含的元素在集合b中没有的 {'r', 'd', 'b'} >>> a | b 并集 # 返回集合a和b中包含的所有元素 {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'} >>> a & b 交集 # 返回集合a和b中都包含了的元素 {'a', 'c'} >>> a ^ b 对称差集 # 不同时包含于a和b的元素 {'r', 'd', 'b', 'm', 'z', 'l'}
集合推导式(Set comprehension):
>>>a = {x for x in 'abracadabra' if x not in 'abc'} >>> a {'r', 'd'}
集合专用函数
1、添加元素
add()
向集合中添加一个元素 格式:集合.add(值) 返回值:None 注意:直接改变原有集合
>>>thisset = set(("Google", "Runoob", "Taobao")) >>> thisset.add("Facebook") >>> print(thisset) {'Taobao', 'Facebook', 'Google', 'Runoob'}
还有一个方法,也可以添加元素,且参数可以是列表,元组,字典等,语法格式如下:
s.update(x)
>>>thisset = set("Google", "Runoob", "Taobao") >>> thisset.update({1,3}) >>> print(thisset) {1, 3, 'Google', 'Taobao', 'Runoob'} >>> thisset.update([1,4],[5,6]) >>> print(thisset) {1, 3, 4, 5, 6, 'Google', 'Taobao', 'Runoob'}
2、移除元素
remove()
删除集合中的某个元素 格式:集合.remove(值) 返回值:None 注意:直接改变原有集合
>>>thisset = set(("Google", "Runoob", "Taobao")) >>> thisset.remove("Taobao") >>> print(thisset) {'Google', 'Runoob'} >>> thisset.remove("Facebook") # 不存在会发生错误 Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'Facebook'
discard()
删除集合中的某个元素 格式:集合.dicard(值) 返回值:None 注意:直接改变原有集合
remove移除非成员值会报错,discard移除非成员值,啥也不报错!
>>>thisset = set(("Google", "Runoob", "Taobao")) >>> thisset.discard("Facebook") # 不存在不会发生错误 >>> print(thisset) {'Taobao', 'Google', 'Runoob'}
pop()
随机删除集合中的一个元素 格式:集合.pop() 返回值:删除的那个元素 注意:直接改变原有集合
thisset = set(("Google", "Runoob", "Taobao", "Facebook")) x = thisset.pop()
print(x) >>>输出Runoob
3、清空集合
clear()
清空集合 格式:集合.clear() 返回值:None 注意:直接改变原有集合
>>>thisset = set(("Google", "Runoob", "Taobao")) >>> thisset.clear() >>> print(thisset) set()
copy()
复制集合 格式:集合.copy() 返回值:复制的一份集合
fruits = {"apple", "banana", "cherry"} x = fruits.copy() print(x)
输出结果为:
{'cherry', 'banana', 'apple'}
4、集合判断
issuperset()
检测一个集合是不是另外一个集合的超集 格式:集合1.issuperset(集合2) 返回值:布尔值
x = {"f", "e", "d", "c", "b", "a"} y = {"a", "b", "c"} z = x.issuperset(y) print(z)
输出结果为:True
x = {"f", "e", "d", "c", "b"} y = {"a", "b", "c"} z = x.issuperset(y) print(z)
输出结果为:False
issubset()
检测一个集合是不是另外一个集合的子集 格式:集合1.issubset(集合2) 返回值:布尔值
x = {"a", "b", "c"} y = {"f", "e", "d", "c", "b", "a"} z = x.issubset(y) print(z)
输出结果为:True
x = {"a", "b", "c"} y = {"f", "e", "d", "c", "b"} z = x.issubset(y) print(z)
输出结果为:False
isdisjoint()
检测2个集合是否不相交 格式:集合1.isdisjoint(集合) 返回值:布尔值
x = {"apple", "banana", "cherry"} y = {"google", "runoob", "facebook"} z = x.isdisjoint(y) print(z)
输出结果为:True
x = {"apple", "banana", "cherry"} y = {"google", "runoob", "apple"} z = x.isdisjoint(y) print(z)
输出结果为:False