集合与不可变集合

一、集合

集合是一种无序的序列。集合中的元素具有唯一性,即集合中不存在两个同样的元素。

1.集合的格式

通常用一对大括号“{}”来创建集合:

s = {1,2,5}

也可以使用set()函数来生成:

s = set([1,3,2,1])
print(s)     #结果为:{1,3,2}

2.集合的运算

(1)交集

两个集合的交集可以用操作符" & "实现,也可以用.intersection()方法得到两个集合的交集,返回两个集合共有元素的集合。

a = {1,5,6,9}
b = {1,4,6,8}
s = a.intersection(b)
v = a & b
print(s)     #结果为:{1, 6}
print(v)     #结果为:{1, 6}

(2)并集

两个集合的并集可以用操作符" | "实现,也可以用.union()方法得到两个集合的并集,返回两个集合所有元素的集合

a = {1,5,6,9}
b = {1,4,6,8}
s = a.union(b)
v = a | b
print(s)      #结果为:{1, 4, 5, 6, 8, 9}
print(v)      #结果为:{1, 4, 5, 6, 8, 9}

(3)差集

两个集合的差集可以用操作符" - "实现,也可以用.difference()方法得到两个集合的差集,返回在第一个集合而不在第二个集合的元素组成的集合。

a = {1,5,6,9}
b = {1,4,6,8}
s = a.difference(b)
v = b - a
print(s)    #结果为:{5,9}
print(v)    #结果为:{4,8}

(4)交叉补集

两个集合的差集可以用操作符" ^ "实现,也可以用.symmetric_difference()方法得到两个集合的交叉补集,返回两个集合并集与交集的差。

a = {1,5,6,9}
b = {1,4,6,8}
s = a.symmetric_difference(b)
v = b ^ a
print(s)      #结果为:{4, 5, 8, 9}
print(v)      #结果为:{4, 5, 8, 9}

3.集合的包含关系

(1)子集

判断子集关系可以用运算符" <= "实现,也可以用.issubset()方法来判断是不是某个集合的子集。

a = {1,5,6,9}
b = {1,6}
print(b<=a)      #结果为:True
print(b.issubset(a))     #结果为:True

(2)父集

判断父集关系可以用运算符" >= "实现,也可以用.issuperset()方法来判断是不是某个集合的父集。

a = {1,5,6,9}
b = {1,6}
print(a>=b)       #结果为:True
print(a.issuperset(b))      #结果为:True

4.集合的方法

(1).add()方法

.add()方法就是添加单个元素。

b = {1,6}
b.add(5)
print(b)      #结果为:{1,5,6}

(2).update()方法

.update()方法用来向集合添加多个元素,接受一个序列作为参数。

b = {1,6}
b.update([1,5,7])
print(b)     #结果为:{1, 5, 6, 7}

(3).remove()方法

.remove()方法可以从集合中移除单个指定元素,元素不存在会报错。

b = {1,6,5}
b.remove(5)
print(b)     #结果为:{1,6}

(4).pop方法

.pop方法随机地从集合中删除并返回一个元素。

b = {1,6,5,'alex'}
v = b.pop()
print(b)     #返回删除元素的集合
print(v)     #随机被删除的元素

(5).discard()方法

.discard()方法作用跟.remove()方法一样,区别在于删除不存在元素不会报错。

b = {1,6,5,'alex'}
b.discard(3)
print(b)           #结果为:{1, 'alex', 5, 6}

5.判断从属关系

b = {1,6,5,'alex'}
s = 5 in b
print(s)     #结果为:True

二、不可变集合

不可变集合是一种不可变类型,一旦创建就不能改变,其构建方法如下:

s = frozenset([1,6,'alex',1])
print(s)    #结果为:frozenset({1, 'alex', 6})

PS:以上代码得到的结果集合是可变的,不是唯一值。

转载于:https://www.cnblogs.com/lzc69/p/11057766.html

猜你喜欢

转载自blog.csdn.net/weixin_33888907/article/details/93149475