python中集合的用法以及哈希的介绍

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}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值