集合是无序和无索引的集合。在 Python 中,集合用花括号编写。没有值只有键。(会计算哈希值存放)
一、创建
1.直接{ }
s = {12,52,62,41}
2.使用内置函数set( )
s = set({56,23,85,74,12})
【注】set( )函数只能接收一个参数; 集合不会存在重复元素;输出结果都是无序的;
3. 空集合
s = set()
【注】只有这一种方法可以创建空集合
二、集合元素的操作
1.存在指定元素
s1 = {12,52,40,60,85}
print(12 in s1)
print(85 not in s1)
True
False
2.新增
1.add( )
s1 = {12,52,40,60,85}
s1.add(100)
print(s1)
{12,52,100,85 ,60,40}
【注】add( )函数只能添加一个元素
2.update( )函数
s1 = {12,52,40,85}
s1.update([120,69,'python'])
print(s1)
s1.update({800,900,'word'})
print(s1)
s1.update(('hello'))
print(s1)
{69, 40, 12, 'python', 52, 85, 120}
{800, 900, 69, 40, 12, 'python', 'word', 52, 85, 120}
{800, 'h', 900, 69, 40, 'l', 12, 'python', 'word', 'e', 52, 85, 120, 'o'}
【注】只有添加元素是集合{ }、列表 [ ]时字符串不会被拆开;update( )只能接受一个参数。
3.删除
1.remove( )
s1 = {12,52,40,85}
s1.remove(12)
print(s1)
s1.remove(100)
print(s1)
{52,40,85}
KeyError: 100
【注】删除一个元素,没有找到对应元素时不会抛出kerError
2.discard()
s1 = {12,52,40,85}
s1.discard(85)
print(s1)
s1.discard(100)
print(s1)
{40,10,52}
【注】 删除一个元素,没有找到对应元素时不会抛出异常
3.pop( )
s1 = {12,52,40,85}
s1.pop()
print(s1)
s1.pop()
print(s1)
{12,52,85}
{12,85}
【注】pop( )函数没有参数,随机删除一个元素。
4.clear( )清空
s1 = {12,52,40,85}
s1.clear()
print(s1)
set()
三、集合间关系
1.判断相等
s1 = {12,52,40,85}
s2 = {85,40,52,12}
print(s1 == s2)
print(s1 != s2)
True
False
【注】只判断元素是否相等与位置没有关系(无序性)
2.判断子集
s1 = {12,52,40,85}
s2 = {85,12}
print(s2.issubset(s1))
True
3.判断超集
如果集合B是集合A的子集,则A集合是B集合的超集
s1 = {12,52,40,85}
s2 = {85,40}
print(s1.issuperset(s2))
True
4.判断交集
有交集返回False 反之返回True
s1 = {12,52,40,85}
s2 = {85,90,100}
print(s1.isdisjoint(s2))
Flase
四、数据操作
1.计算交集
s1 = {12,52,40,85}
s2 = {85,88,60,40}
print(s1.intersect(s2))
print(s1 & s2)
"""两种方法是等价"""
{85,40}
{85,40}
2.计算并集
s1 = {12,52,40,85}
s2 = {40,99}
print(s1.union(s2))
print(s1 | s2)
{12,40,99,52,85}
{12,40,99,52,85}
【注】会去除重复元素
3.差集
s1 = {12,52,40,85}
s2 = {85,40,99}
print(s1.difference(s2))
print(s1 - s2)
{52,12,}
【注】在s1中去除s1与s2 的交集,剩余元素就是s1减s2的集合
4.对称差集
s1 = {12,52,40,85}
s2 = {85,40,99}
print(s1.symmetric_difference(s2))
print(s1 ^ s2)
{52,12,99}
{52,12,99}
【注】在s1与s2的并集中去除交集的结果
五、生成式
se = {i*5 for i in range(10)}
print(se)
{0, 35, 5, 40, 10, 45, 15, 20, 25, 30}
数据结构 | 是否可变 | 是否重复 | 是否有序 | 定义符号 |
列表(list) | 可变 | 可重复 | 有序 | [ ] |
元组(tuple) | 不可变 | 可重复 | 有序 | ( ) |
字典(dict) | 可变 | key不可重复 value可重复 | 无序 | { key:value} |
集合(set) | 可变 | 不可重复 | 无序 | { } |