python 集合转成列表_python 集合

本文介绍了Python集合,它是无序、唯一元素的组合,依赖散列表,存放元素引用。对比了集合与列表,集合元素须可哈希,增删和查找元素时间复杂度为O(1),但不支持索引查询且耗内存。工作中常判断元素是否存在时,可将列表转集合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python 集合 set

1、什么是集合

集合是一系列无序的、唯一的元素组合。

2、集合的基础

集合的实现也是依赖散列表的,但是在他们的散列表里面存放的只有元素的引用。

460ff2eb51c6e758feea2e092c09704e.png

通过集合图中集合b和集合a调用__sizeof__()的方法可以验证这一点,集合中存放的只是元素的引用,和元素本身无关。

3、集合与列表的比较

和列表一样,集合也可以存放不同类型的元素,但是因为集合的实现是依赖散列表的,所以集合中的元素必须是可哈希的对像,列表则无此限制。

e4f530d24839f3494dc43f72af700c25.png

相比于列表,集合的删除和添加时间复杂度都是O(1),而列表除了在末尾进行增删操作时间复杂度是O(1),在其他位置进行增删操作都涉及后面元素的移动,在那个位置进行增删操作概率一样,时间复杂度可以这么计算:1/n*(1+2+3+...+n)=(n+1)/2=O(n)。

基于散列实现的集合,又有点也有缺点,

A.集合不支持索引查询,

4d3c57b5fde9351d6e05ceb838f05ba9.png

B.集合很消耗内存

2a6a8bd86a47d0385e524dc368ab4289.png

对于列表和集合我们都可以通过 in来判断一个元素是不是在列表或者集合中,但是两个的时间复杂度相差很多,对于集合,时间复杂度就是O(1),因为集合是基于散列的,可以直接查找,列表底层是类似于线性表,想要判断一个元素是否在列表中,只能从头开始遍历。从图中可以看出,当要查找的元素位于列表靠后为的时候,所用的时间会成倍增长,所以在工作中,如果要经常判断一个元素是否在列表内部,最好是先将列表转成集合,在进行判断。

840b4af7e99bb26c22cc1e97963aeec6.png

4、小结

a.集合里面的元素必须是可哈希的,

b.集合很消耗内存

c.可以搞笑判断某个元素是否存在于某个集合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值