与字典类似,集合最大的特点就是唯一性。集合中所有的元素都应该是独一无二的,并且也是无序的。
创建集合
使用花括号
set = {"python","Java"}
print(type(set))
使用集合推导式
set = {s for s in "python"}
print(set)
print(type(set))
体现出集合无序的特征。
使用类型构造器set
set = set("python")
print(set)
print(type(set))
注意:由于集合是无序的,所以不能使用下标索引的方式来对其进行访问。只能使用in或not in来判断某个元素是否在集合中。
去重(唯一性)
可以将有重复元素的列表传入集合,会自动去除重复的元素。
set = set([1,1,2,3,4])
print(set)
集合的内置函数
copy()方法
使用copy方法,实现集合的浅拷贝。
isdisjoint(可迭代对象)方法
使用isdisjoint(可迭代对象)方法,用来判断两个集合是否相关(存在相同元素),False代表有相同元素,True则代表没有相同元素。
s = set("1234")
print(s.isdisjoint(set("3214")))
issubset()方法
使用该方法可以判断该集合是否是另外的集合的子集。
s = set("python")
print(s.issubset("www.python.com"))
issuperset()方法
使用该方法可以判断该集合是否是另外的集合的超集。
s = set("www.python.com")
print(s.issuperset("python"))
union()方法
使用该方法可以构成该集合和另外的集合的并集。
s = set("www.python.com")
print(s.union("JAVA"))
intersection()方法
使用该方法可以找出该集合和另外的集合的交集。
s = set("www.python.com")
print(s.intersection("JAVApy"))
difference()方法
使用该方法可以找出该集合与另外的集合的差集。
s = set("python")
print(s.difference("JAVApy"))
注意:以上三个方法支持多参数。
symmetric_difference()方法
使用该方法可以求出该集合和另外的集合的对称差集。该方法不能多参数。
s = set("python")
print(s.symmetric_difference("JAVApy"))
运算符
<=:检测子集
<:真子集
>=:超集
>:真超集
|:并集
&:交集
-(减号):差集
^:对称差集
注意:使用运算符时,符号两边必须都是集合类型的数据。方法可以使用任何可迭代对象。
frozenset
python将集合划分为可变(set)和不可变(frozenset)两种对象。
若不是修改集合内容的方法可以适用于frozenset。
t = frozenset("python")
仅适用于set对象的方法(会对集合改变的方法)
update(*others)方法
该方法将使用others参数指定的值来更新集合。
注意:若方法中的参数是others,则说明该方法支持多个参数。;若参数是other,则只能存在一个参数。
s = set("python")
s.update([1,2],"45")
print(s)
intersection_update(*others)、difference_update(*others)和symmetric_difference_update(*others)
这三个方法分别是将交集、差集和对称差集进行更新。
s = set("python")
s.update([1,2],"45")
print(s)
s.intersection_update("python")
print(s)
s.difference_update("Php","Java")
print(s)
s.symmetric_difference_update("hello python")
print(s)
add()方法
该方法是将集合中加入输入。当参数是字符串时,该方法会将整个字符串作为一个元素插入到集合中,而不是迭代插入。
s = set("python")
s.add("45")
print(s)
remove(elem)和discard(elem)方法
这两个方法是从集合中删除元素。其区别是,如果指定的元素不存在remove方法会抛出异常,而discard方法则会静默处理。
s = set("python")
s.discard('j')
print(s)
s.remove('a')
print(s
pop()方法
该方法用于随机从集合中弹出一个元素。因为存储顺序是随机的,所以弹出也是随机的。
s = set("python")
print(s.pop())
clear()方法
该方法会直接将集合中的元素数据清空。
s = set("python")
print(s)
s.clear()
print(s)
可哈希
想要正确的创建集合和字典,要求字典的键还有集合的元素都必须是可以哈希的。如果一个对象是可哈希的,那么就要求它的哈希值必须在其整个程序的生命周期内保持不变。
hash(object)函数
通过该函数可以获取一个对象的哈希值。
print(hash(1))
print(hash(1.0))
print(hash(1.01))
求一个整数的哈希值,其哈希值永远等于它自身。如果两个对象的值是相等的,尽管是两个不同的对象,那么它们的哈希是也是相等的。
在python中大部分不可变的对象都是可哈希的,而可变对象则是不可哈希的。
print(hash("python"))
print(hash([1,2,3]))
因为集合是一个可变容器,而集合要求集合中的元素都是可哈希的,所以嵌套集合是不可行的。
x = {1,2,3}
y = {x,4,5}
如果我们非要使用嵌套集合,内层集合必须使用frozenset。
x = frozenset({1,2,3})
y = {x,4,5}
print(y)