集合
01.set是可变的,无序的,不重复的元素的集合。
- 集合的基本概念:
- 全集,所有元素的集合;例如实数集,所有实数组成的集合就是全集。
- 子集(subset)和超集(superset),一个集合a的所有元素都在另一个集合b中,a是b的子集,b是a的超集。
- 真子集和真超集,a是b的子集,且a不等于b;a是b的真子集,b是a的真超集。
- 并集,多个集合合并的结果。
- 交集,多个集合的公共部分。
- 差集,集合中除去和其他集合公共的部分。
- 集合的定义方法:
- 使用花括号定义,比如:
new_set = {"node01", "node02"}
。- 使用空的花括号会定义一个字典,而非集合。
- 使用set()函数定义,比如:new_set = set(range(10))。
- set()函数仅可接受一个参数,该参数为一个可迭代对象。
- set()函数可定义一个空集合(唯一定义空集合的方法)。
- 使用花括号定义,比如:
- 集合操作的原理:
- 将集合中的每一个元素进行hash运算,将对应的值作为引用的标记。
- 列表,集合和字典无法作为集合的元素。
- 将集合中的每一个元素进行hash运算,将对应的值作为引用的标记。
- 集合的特性包括:
- 集合的元素要求必须可以hash。
- 集合的元素不可以索引。
- 集合可以迭代。
02.set的内置方法:
- 添加元素:
- add(),为集合添加一个元素,比如:
new_set = {14, 'guti',(7, 'raul')} new_set.add('carlos') print(new_set)
- update(),合并其他元素到集合中来,参数比如是可迭代的对象,比如:
new_set = {1, 2, 3, 4, 5} new_set.update(range(2, 7)) print(new_set)
- update()会遍历可迭代对象中的元素,再分别将元素add()到当前的集合中。
- add(),为集合添加一个元素,比如:
- 删除元素:
- remove(value),从集合中移除一个元素;若元素不存在,则抛出KeyError。
- discard(value),从集合中移除一个元素;如元素不存在,什么都不返回。
- pop(),移除并返回任意的元素;如是空集合,则返回KeyError,比如:
new_set = {'guti', 'raul', 'carlos'} result = new_set.pop() print(result)
- clear(),删除所有的元素。
- 修改元素:
- 集合不能修改元素;要么删除,要么加入新的元素。
- 查询元素:
- 非线性结构,无法索引;可以迭代所有元素。
- 使用in或者not in查询元素是否在集合中较高,推荐使用。
- 线性结构(比如列表)的查询事件复杂度是O(n),即随着数据规模的增大而增加耗时。
- 集合,字典等结构,内部使用hash值作为key,时间复杂度为O(1),即查询时间和数据规模无关。
03.set的运算:
- 并集,将集合a和集合b的所有元素合并到一起,组成的集合称为集合a与集合b的并集。
- union(),用于返回多个集合合并后的新集合,也可以使用运算符”|”重载,比如:
set_a = {'guti', 'raul', 'carlos'} set_b = {'guti', 'figo', 'salgado'} print(set_a.union(set_b))dddd print(set_a | set_b)
- union(),用于返回多个集合合并后的新集合,也可以使用运算符”|”重载,比如:
- 交集,集合a和b,由所有属于a且属于b的元素组成的集合。
- intersection(),用于返回多个集合的交集,也可以使用运算符”&”重载,比如:
set_a = {'guti', 'raul', 'carlos'} set_b = {'guti', 'figo', 'salgado'} print(set_a.intersection(set_b)) print(set_a & set_b)
- intersection(),用于返回多个集合的交集,也可以使用运算符”&”重载,比如:
- 差集,集合a和集合b,由所有属于a且不属于b的元素组成的集合。
- difference(),用于返回多个集合的差集,也可以使用运算符”-“重载,比如:
set_a = {'guti', 'raul', 'carlos'} set_b = {'guti', 'figo', 'salgado'} print(set_a.difference(set_b)) print(set_a - set_b)
- difference(),用于返回多个集合的差集,也可以使用运算符”-“重载,比如:
- 对称差集,集合a和集合b,由所有不属于a和b的交集元素组成的集合,记做(a-b) U (b-a)。
- symmetric_differece(),用于返回多个集合的对称差集,也可以使用运算符”^”重载,比如:
set_a = {'guti', 'raul', 'carlos'} set_b = {'guti', 'figo', 'salgado'} print(set_a.symmetric_difference(set_b)) print(set_a ^ set_b)
- symmetric_differece(),用于返回多个集合的对称差集,也可以使用运算符”^”重载,比如:
04.set的逻辑运算:
- a <= b,判断集合a是否是集合b的子集。
- a < b,判断集合a是否是集合b的真子集,比如:
set_a = {'guti'}
set_b = {'guti', 'figo', 'salgado'}
print(set_a < set_b)
- a >= b,判断集合a是否是集合b的超集。
- a > b,判断集合a是否是集合b的真超集。
- a.isdisjoint(b),判断集合a与集合b是否有交集,比如:
set_a = {'guti', 'carlos'}
set_b = {'guti', 'figo', 'salgado'}
print(set_a.isdisjoint(set_b))
- 如没有交集,返回true,反之返回false。
集合解析式
01.集合解析式:
- 集合解析式指使用特定语句返回一个新的集合,其格式为:
{返回值 for 元素 in 可迭代对象 if 条件}
- 集合解析式的示例:
result = {(x,x+1) for x in range(10)}
print(result)
文档更新时间: 2020-05-25 16:20 作者:闻骏