python
集合
说明
《Python 教程》 帮助读者成为泛程序员,持续修订中,提供建议、纠错、催更加微信 gairuo123。查看 更新日志。作者开办 Python 数据分析培训,详情 Python 数据分析培训。
![]() |
本教程作者所著新书《Python之光:Python编程入门与实战》(ISBN:9787111729891)已由机械工业出版社出版上市,各大电商平台有售,欢迎:查看详情并关注购买。 |
集合(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() 中的介绍。