说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
集合(set)是存放无顺序无索引内容的容器。在 Python 中,集合用花括号{}
编写。我们用集合可以消除重复的元素,也可以用它作交、差、并、补等数学运算。集合本质是字典的键,不重复。
集合里不能有列表、集合、字典等可变的内容。无法更改集合里的元素,但可以添加新元素。
s = {'5元', '10元', '20元'} # 定义集合
s = set() # 空集合
s = set([1,2,3,4,5]) # {1, 2, 3, 4, 5} 使用列表定义
s = {1, True, 'a'}
s = {1, 1, 1} # {1} 去重
type(s) # set 类型检测
我们不能使用 {}
语法创建空集,因为它会创建一个空字典。要创建一个空集,我们使用 set()。
定义集合时的每个元素必须是不可变对象,如列表作为元素时会报错:
{[1,2], 2}
# TypeError: unhashable type: 'list'
集合没有顺序没有索引,所以无法指定位置去访问,但可以用遍历的方式进行读取。
s = {'a', 'b', 'c'}
for i in s:
print(i)
# b
# c
# a
判断是否有某个元素:
s = {'a', 'b', 'c'}
'a' in s # True
添加元素:
s = {'a', 'b', 'c'}
s.add(2) # {2, 'a', 'b', 'c'}
s.update([1,3,4]) # {1, 2, 3, 4, 'a', 'b', 'c'}
删除清空元素:
s = {'a', 'b', 'c'}
s.remove('a') # {'b', 'c'} 删除不存在的会报错
s.discard('3') # 删除一个元素,无则忽略不报错
s.clear() # set() 清空
支持关于容器类型的一些通用操作:
s = {'a', 'b', 'c'}
len(s) # 3 长度
max(s) # 'c' 最大值
min(s) # 'a' 最小值
any(s) # True 是否有一真
all(s) # True 是否全真
sorted(s) # ['a', 'b', 'c'] 返回排序后的列表
s.pop() # 'b' 删除最后一个,因为无序所以随机
s2 = s.copy() # 深拷贝, s 变化不影响 s2
{i**2 for i in range(1,4)}
# {1, 4, 9}
my_list = [1, 2, 3]
{i**2 for i in my_list}
# {1, 4, 9}
二元操作:
举例:
s1 = {1,2,3}
s2 = {2,3,4}
s1 & s2 # {2, 3} 交集
s1.intersection(s2) # {2, 3} 交集
s1.intersection_update(s2) # {2, 3} 交集, 会覆盖 s1
s1 | s2 # {1, 2, 3, 4} 并集
s1.union(s2) # {1, 2, 3, 4} 并集
s1.difference(s2) # {1} 差集
s1.difference_update(s2) # {1} 差集, 会覆盖 s1
s1.symmetric_difference(s2) # {1, 4} 交集之外
s1.isdisjoint(s2) # False 是否没有交集
s1.issubset(s2) # False s2 是否 s1 的子集
s1.issuperset(s2) # False s1 是否 s2 的超集, 即 s1 是否包含 s2 的所有元素
更多操作,可以查看 set() 中的介绍。
frozenset() 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。关于它的操作可以查看 set() 中的介绍。
更新时间:2024-05-25 13:52:41 标签:python 集合