1.集合的创建
(1)直接创建
x = {"python", "cloud"}
(2)集合推导式
x = "ILoveCloud"
y = {s for s in x}
print(y)
## {'e', 'u', 'l', 'o', 'd', 'L', 'v', 'C', 'I'}
# 由此也可以看出集合的无序和互异性。
(3)使用类型构造器set()
set("ILoveCloud")
2.集合的各种方法:
s1 = set("Cloud")
s2 = set("love")
print(s1.isdisjoint(s2))
## False
# 判断s1和s2是否不相关,True为不相关,False为相关(二者是否拥有共同的元素)
print(s1.issubset(s2))
## False
# 判断s1是否为s2的子集。
print(s1.union(s2))
## {'u', 'e', 'C', 'l', 'd', 'v', 'o'}
# s1和s2的并集
print(s1.intersection(s2))
## {'o', 'l'}
# s1和s2的交集
print(s1.difference(s2))
## {'u', 'd', 'C'}
# s1和s2的差集(属于s1而不属于s2)
# 以上三个函数支持多参数
print(s1.symmetric_difference(s2))
## {'C', 'e', 'v', 'u', 'd'}
# s1和s2的并集减去s1和s2的交集
#同时python也给出了相应的运算符
print(s1 <= s2)
## False
# 检测s1是否为s2的子集
print(s1 < s2)
## False
# 检测s1是否为s2的真子集
print(s1 | s2)
## {'C', 'l', 'e', 'v', 'd', 'o', 'u'}
# 求s1和s2的并集
print(s1 & s2)
## {'l', 'o'}
# 求s1和s2的交集
print(s1 - s2)
## {'C', 'd', 'u'}
#求s1和s2的差集
print(s1 ^ s2)
## {'u', 'C', 'd', 'e', 'v'}
#求s1和s2的对称差集
###使用函数时被操作对象可以是任何可迭代对象,使用操作符时被操作对象只能为集合
3.对可变集合的操作
首先,我们一般将set()创建的集合称为可变集合,用frozenset()创建的称为不可变集合。上述方法均可用于操作不可变集合,以下是操作可变集合的一些方法。
s = set("Cloud")
s.update([1, 1],"23")
print(s)
## {'o', 'C', 1, 'd', 'l', '2', 'u', '3'}
#在s中插入其他序列
s.add("45")
print(s)
## {'3', 1, 'l', '2', '45', 'u', 'o', 'd', 'C'}
#注意到update()是迭代获取字符串中每一个字符作为元素传入,而add()是将整个字符串插入。
s.remove(1)
print(s)
## {'2', 'o', 'u', 'C', 'd', '3', '45', 'l'}
# 将集合中的 1 元素删除
s.discard('2')
print(s)
## {'C', 'd', '3', '45', 'l', 'o', 'u'}
# 二者都是删除元素,remove()若输入不存在的元素作为参数则会报错,discard()则会静默处理(不报错)
s.pop()
print(s)
## {'l', 'C', '3', 'u', '45', 'o'}
# 用于在集合中随机删除一个元素
s.clear()
print(s)
## set()
#输出为空集合
4.哈希
每个不可变的对象都有对应的哈希值,通过hash()函数可以获取一个对象的哈希值
print(hash(13), hash(13.0), hash(13.1))
## 13 13 230584300921368589
#对于一个整数,其哈希值总是等于其自身,
#对于两个值相等的不同对象,其哈希值相等
哈希值对于字典和集合的意义,python中大多数不可变的对象都是可哈希的,而可变的对象则是不可哈希的。例如,如果尝试对字符串这个不可变对象进行hash()会得到一个哈希值,如果对列表这个可变序列进行hash()则会报错。同理,元组也可以求其哈希值。
print(hash("Cloud"))
print(hash([1, 2, 3]))
print(hash((1, 2, 3)))
## 8331075841565959296
## TypeError: unhashable type: 'list'
## 529344067295497451
只有可哈希的对象才能做字典的键和集合的元素。
因此若要实现集合的嵌套可用frozenset()作为元素进行嵌套。
x = frozenset({1, 2, 3})
y = {x, 4, 5}
print(y)
## {frozenset({1, 2, 3}), 4, 5}