集合 set
集合是可变的容器
集合内的数据对象都是唯一的(不能重复多次的)
集合是无序的存储结构,集合中的数据没有先后关系
集合内的元素必须是不可变对象
集合是可迭代的(可以用for语句遍历)
集合是相当于只有键没有值的字典(键则是集合的数据)
创建集合的构造函数
set() 创建一个空的集合对象(不能用{}来创建空集合)
set(iterable) 用可迭代对象来创建新的集合对象
示例:
s = set() # s绑定空集合set()
s = set(range(1, 5)) # s = {1, 2, 3, 4}
s = set("hello") # s = {'e', 'o', 'h', 'l'}
注:
非空集合用 {} 括起来,内部的各个元素用逗号(,)分隔开
字面值方式来创建非空集合
s = {1, 2, 3, 4}
s = set("ABCCBA")
s = set({1:"一", 3:"三", 8:"八"})
s = set([1, 3.14, "ABC"])
s = {True, None, "ABC", (1, 2, 3)}
s = {True, None, "ABC", [1, 2, 3]} # 出错
集合的运算:
交集 & 并集| 补集- 对称补集^ 子集< 超集>
**&** 生成两个集合的交集
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = s1 & s2 # s3 = {2, 3}
**|** 生成两个集合的并集
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = s1 | s2 # s3 = {1, 2, 3, 4}
**-** 生成两个集合的补集
s1 = {1, 2, 3}
s2 = {2, 3, 4}
# 生成属性s1但不属于s2的所有元素的集合
s3 = s1 - s2 # s3 = {1}
s3 = s2 - s1 # s3 = {4}
**^** 生成两个集合的对称补集
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = s1 ^ s2 # {1, 4}
**<** 判断一个集合是另一个集合的子集
**>** 判断一个集合是另一个集合的超集
s1 = {1, 2, 3}
s2 = {2, 3}
s2 < s1 # True
s1 > s2 # True
s3 = {3, 4, 5}
s1 > s3 # False
s1 < s3 # False
s1 == s3 # False
**== !=** 判断集合相同或不同
{1, 2, 3} != {3, 2, 1} # False
>= <= 略
**in , not in 运算符**
等同于列表的in 运算符
s1 = {1, 2, 3}
3 in s1 # True
**集合和字典的优点:**
in / not in 运算符的运算速度比较快
**能用于集合的内建(built-in)函数:**
len(x)
max(x)
min(x)
sum(x)
any(x)
all(x)
**集合是可迭代对象**
****集合推导式****
集合推导式是用可迭代对象创建集合的表达式
语法:
{ 表达式 for 变量 in 可迭代对象 [if 真值表达式]}
注:[] 代表其中的内容可省略
示例:
L = [1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 7]
s = {x ** 2 for x in L}
**集合推导式的嵌套等同于列表推导式的嵌套**
固定集合 frozenset
固定集合是不可变的,无序的,含有唯一元素的集合
作用:
固定集合可以作为字典的键,还可以作为集合的值
**固定集合的构造函数 frozenset**
frozenset() 创建一个空的固定集合
frozenset(iterable) 用可迭代对象创建一个新的固定
集合
示例:
fz = frozenset()
fz = frozenset("hello")
fz = frozenset([1,2,3,4,3,4,5])
固定集合的运算:
交集 & 并集 | 补集 - 对称补集 ^
in / not 运算符
< <= > >= == !=
(以上运算符用法等同于set中的用法)
固定集合的方法,相当于集合的全部方法去掉修改集合的方法
小结:
数据类型
**不可变的数据类型**
bool, int, float, complex, str, tuple
frozenset, bytes
**可变的数据类型**
list, dict, set, bytearray