X Tutup
# Set类型 1.Python的`set`类型是集合内元素值唯一、元素值不可变的无序集。 `set`类型并不要求其集合内各个元素都是相同类型。 * 唯一:`set`类型的集合内元素的值唯一。 * 如果有两个变量指向同一个对象,则在`set`集合内只会出现一次 * 如果有两个对象值相等,则在`set`集合内也只会出现一次 * 不可变:一旦创建完毕,则`set`集合内的各个元素值不能修改。 > 本质上`set`通过元素值的哈希值来判断唯一性 ![set的唯一性](../imgs/python_3_1.JPG) 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 注意这里与表达式中的`set`交集、并集操作的区别: 表达式中的`set`交集、并集操作要求两个对象均为集合 ![set方法](../imgs/python_3_3.JPG) 4.`set`对象是可迭代的,因此可用于`len()`函数,`for`循环,以及列表解析中,但是因为是无序的所以不支持索引和分片操作。 ![set可迭代](../imgs/python_3_4.JPG) 5.Python3中,`set`常量可以用大括号创建:`{1,2,3,4}`等价于`set([1,2,3,4])`。 * 空`set`必须由`set([])`创建,`{}`为空字典而不是空`set` * Python3中,`set`的字符串表示为`{...}`形式,而不是`set([...])`形式 6.`set`只能包含不可变的对象,因此列表对象、字典对象、`set`对象均不能作为`set`的元素。 > 元组和字符串可作为`set`的元素 ![set可迭代](../imgs/python_3_5.JPG) 7.`frozenset`是`set`的子类型,它与`set`的唯一区别是: `frozenset`对象可以作为`set`的元素。 ![frozenset](../imgs/python_3_6.JPG) 8.`set`的解析构造(在Python3之后):`{x**2 for x in iter}`,其中`iter`为任何可迭代对象。 ![frozenset](../imgs/python_3_7.JPG)
X Tutup