集合
集合(set)是一个无序的不重复元素序列。集合中的元素不会重复,并且可以进行交集、并集、差集等常见的集合操作。可以使用大括号?{ }?创建集合,元素之间用逗号?,?分隔, 或者也可以使用?set()?函数创建集合。
#直接使用大括号
a = {"sdadsa","adasadad"}
#使用set方法
b = set("sdadsa")
#使用集合推导式
c = {a for a in "sasd"}
print(c)
print(type(c))
print(type(a))
print(b)
print(type(b))
因为集合是个无序的序列,所以我们只能通过迭代的方式获取他里面的元素,不能使用下标
b ={a for a in "health"}
print(b)
?s.copy():返回s集合的一个浅拷贝
a = set("asdfg")
n = a.copy()
print(a,n)
s.isdisjoint(other):如果s集合中没有与other容器存在共同的元素,那么返回True,否则返回False
a = set("asdfg")
print(a)
b = a.isdisjoint('pyhton')
print(b)
s.issubset(other):如果s集合是other容器的子集(注1),那么返回True,否则返回False
a = set("asdfg")
print(a)
b = a.issubset('asdf')
print(b)
s.issuperset(other):如果s集合是other容器的超集(注2),那么返回True,否则返回False
a = set("asdfg")
print(a)
b = a.issuperset('asdf')
print(b)
s.union(*others):返回一个新集合,其内容是s集合与others容器的并集(注3)
a = set("asdfg")
print(a)
b = a.union('qwer')
print(b)
s.intersection(*others):返回一个新集合,其内容是s集合与others容器的交集(注4)
a = set("asdfg")
print(a)
b = a.intersection('as')
print(b)
s.difference(*others):返回一个新集合,其内容是存在于s集合中,但不存在于others容器中的元素(注5)
a = set("asdfg")
print(a)
b = a.difference('as')
print(b)
s.symmetric_difference(other):返回一个新集合,其内容是排除掉s集合和othr容器中共有的元素后,剩余的所有元素
a = set("asdfg")
print(a)
b = a.symmetric_difference('as')
print(b)
注1:对于两个集合A、B,如果集合A中任意一个元素都是集合B中的元素,我们就说这两个集合有包含关系,称集合A为集合B的子集(Subset)。
注2:对于两个集合A、B,如果集合B中任意一个元素都是集合A中的元素,我们就说这两个集合有包含关系,称集合A为集合B的超集(Superset)。
注3:对于两个集合A、B,把他们所有的元素合并在一起组成的集合,叫做集合A与集合B的并集(Uion)。
注4:对于两个集合A、B,由所有属于集合A且属于集合B的元素所组成的集合,叫做集合A与集合B的交集(Intersection)。
注5:对于两个集合A、B,由所有属于集合A且不属于集合B的元素所组成的集合,叫做集合A与集合B的差集(Difference)。
注6:others参数表示支持多个容器(参数类型可以是集合,也可以是序列);other参数则表示单个容器。
我们也可以使用运算符来求集合的各种集合(注意:只能两个集合之间比较)
<= 、?<:左边的集合是右边集合的子集
> 、>=:左边的集合是右边集合的超集
a = set("asdfg")
print(a)
print(a >= set("asdf"))
print(a > set("asd"))
print(a <= set("asdfg"))
print(a < set("asdfgh"))
|:求并集
a = set("asdfg")
print(a)
#并集
print(a | {1,2,3} | set("dasd"))
&:求交集
a = set("asdfg")
print(a)
#交集
print(a & set("dasd"))
-:求差集
a = set("asdfg")
print(a)
#差集
print(a - set("dasd"))
^:对称差集
a = set("asdfg")
print(a)
#差集
print(a ^ set("qwer"))
集合也分为可变集合和不可变集合
使用set方法生成的集合是可变的集合,使用frozenset方法生成的集合是不可变集合
上边的那些方法没有修改集合所以同时使用雨frozenset方法生成的集合
下边的这些方法只适用于set方法生成的可变集合:
update:用于修改当前集合,可以添加新的元素或集合到当前集合中,如果添加的元素在集合中已存在,则该元素只会出现一次,重复的会忽略。
intersection_update()
?:用于获取两个或更多集合中都重叠的元素,即计算交集。
intersection_update()
?方法不同于?intersection()
?方法,因为?intersection()
?方法是返回一个新的集合,而?intersection_update()
?方法是在原始的集合上移除不重叠的元素。
a = set("asdfg")
print(a)
a.intersection_update("as")
print(a)
difference_update() :用于移除两个集合中都存在的元素。
difference_update()
?方法与?difference()
?方法的区别在于?difference()
?方法返回一个移除相同元素的新集合,而?difference_update()
?方法是直接在原来的集合中移除元素,没有返回值。
a = set("asdfg")
print(a)
a.difference_update("as")
print(a)
symmetric_difference_update() :移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
a = set("asdfg")
print(a)
a.symmetric_difference_update("askl")
print(a)
add:用于给集合添加元素,如果添加的元素在集合中已存在,则不执行任何操作。
a = set("asdfg")
print(a)
a.add("askl")
print(a)
remove和discard都是删除指定元素,区别是删除集合中不存在的元素时,remove会报错而discard会静默处理
a = set("asdfg")
print(a)
a.remove("a")
a.discard("dsads")
print(a)
pop:随机弹出一个元素
a = set("asdfg")
print(a)
print(a.pop())
print(a)
clear:直接将集合清空
a = set("asdfg")
print(a)
a.clear()
print(a)