Set类型
1.Python的set
类型是集合内元素值唯一、元素值不可变的无序集。
set
类型并不要求其集合内各个元素都是相同类型。
- 唯一:
set
类型的集合内元素的值唯一。- 如果有两个变量指向同一个对象,则在
set
集合内只会出现一次 - 如果有两个对象值相等,则在
set
集合内也只会出现一次
- 如果有两个变量指向同一个对象,则在
- 不可变:一旦创建完毕,则
set
集合内的各个元素值不能修改。本质上
set
通过元素值的哈希值来判断唯一性
2.set
本身的性质有:
set
对象是可迭代对象set
对象可以增长或缩短set
对象可能包含各种类型的对象作为元素- 创建
set
对象的方法为调用x=set(iter)
,其中iter
为任何序列或可迭代对象
3.set
对象有以下操作:
- 成员关系:
e in x
(返回bool
值) - 差集:
x-y
(返回新的set
对象) - 并集:
x|y
(返回新的set
对象) - 交集:
x&y
(返回新的set
对象) - 对称差集:
x^y
(返回新的set
对象)对称差集:并集中去掉交集的那部分
- 判定x是否是y的超集:
x>y
(返回bool
值) - 判定x是否是y的子集:
x<y
(返回bool
值)
3.set
的方法有:
.add(item)
:向set
中插入一项,原地修改(返回None
)。其中item
为待插入项.update(iter)
:求并集,原地修改(返回None
)。其中iter
为任何可迭代对象.remove(item)
:向set
中删除一项,原地修改(返回None
)。其中item
为待删除项.intersection(iter)
:求交集,返回新的set
对象。其中iter
为任何可迭代对象注意这里与表达式中的
set
交集、并集操作的区别: 表达式中的set
交集、并集操作要求两个对象均为集合
4.set
对象是可迭代的,因此可用于len()
函数,for
循环,以及列表解析中,但是因为是无序的所以不支持索引和分片操作。
5.Python3中,set
常量可以用大括号创建:{1,2,3,4}
等价于set([1,2,3,4])
。
- 空
set
必须由set([])
创建,{}
为空字典而不是空set
- Python3中,
set
的字符串表示为{...}
形式,而不是set([...])
形式
6.set
只能包含不可变的对象,因此列表对象、字典对象、set
对象均不能作为set
的元素。
元组和字符串可作为
set
的元素
7.frozenset
是set
的子类型,它与set
的唯一区别是:
frozenset
对象可以作为set
的元素。
8.set
的解析构造(在Python3之后):{x**2 for x in iter}
,其中iter
为任何可迭代对象。