Python 集合 set
1、什么是集合
集合是一系列无序的、唯一的元素组合。
2、集合的基础
集合的实现也是依赖散列表的,但是在他们的散列表里面存放的只有元素的引用。
通过集合图中集合b和集合a调用__sizeof__()的方法可以验证这一点,集合中存放的只是元素的引用,和元素本身无关。
3、集合与列表的比较
和列表一样,集合也可以存放不同类型的元素,但是因为集合的实现是依赖散列表的,所以集合中的元素必须是可哈希的对像,列表则无此限制。
相比于列表,集合的删除和添加时间复杂度都是O(1),而列表除了在末尾进行增删操作时间复杂度是O(1),在其他位置进行增删操作都涉及后面元素的移动,在那个位置进行增删操作概率一样,时间复杂度可以这么计算:1/n*(1+2+3+...+n)=(n+1)/2=O(n)。
基于散列实现的集合,又有点也有缺点,
A.集合不支持索引查询,
B.集合很消耗内存
对于列表和集合我们都可以通过 in来判断一个元素是不是在列表或者集合中,但是两个的时间复杂度相差很多,对于集合,时间复杂度就是O(1),因为集合是基于散列的,可以直接查找,列表底层是类似于线性表,想要判断一个元素是否在列表中,只能从头开始遍历。从图中可以看出,当要查找的元素位于列表靠后为的时候,所用的时间会成倍增长,所以在工作中,如果要经常判断一个元素是否在列表内部,最好是先将列表转成集合,在进行判断。
4、小结
a.集合里面的元素必须是可哈希的,
b.集合很消耗内存
c.可以搞笑判断某个元素是否存在于某个集合
本文介绍了Python集合,它是无序、唯一元素的组合,依赖散列表,存放元素引用。对比了集合与列表,集合元素须可哈希,增删和查找元素时间复杂度为O(1),但不支持索引查询且耗内存。工作中常判断元素是否存在时,可将列表转集合。

1037

被折叠的 条评论
为什么被折叠?



