Python 集合 pop()函数使用详解,pop随机删除原理

set.pop()


**返回值**


* 返回删除的元素


  

**实例:随机删除一个元素**



set1 = {‘zhangsan’, ‘lisi’, ‘wangsu’}

set1.pop()
print(set1)


输出:



{‘lisi’, ‘zhangsan’}


从伪源码(Python的内置函数看不到源码,只能看到函数介绍)中可以看到, pop()  会「删除」并「返回」集合中的「元素」,如果集合为「空」,就会报错 KeyError。


![在这里插入图片描述](https://img-blog.csdnimg.cn/4ccc35f3732847bfa2b1c3ca2e4e4fba.png)


  

## 1、随机删除并不完全随机


 pop()  是基于HashMap实现的,它总是「删除」集合中的「第一个元素」,由于集合是「无序」的,所以它看起来就像是「随机」删除元素。


### 1.1、纯数字


当集合中的元素是「纯数字」时,集合会按照从小到大的顺序排列元素,「最小」的数值会别排在第一个,所以pop()时,会删除最小的那个元素。



set1 = {1, 5, 3, 9, 2}

print(‘删除前:’, set1)
set1.pop()
print(‘删除后:’, set1)


第一次执行输出:



删除前: {1, 2, 3, 5, 9}
删除后: {2, 3, 5, 9}


第二次执行输出:



删除前: {1, 2, 3, 5, 9}
删除后: {2, 3, 5, 9}


多执行几次,我们可以发现, pop()  每次都删除1,因为1是最小的,总是被排在第一个。


  

### 1.2、纯字符


当集合中的元素是「纯字符串」时,集合无法保证元素的排序,由于  pop()  总是删除第一个元素,所以这种情况看起来就是随机删除。



set1 = {‘aaa’, ‘bbb’, ‘ccc’, ‘ddd’}

print(‘删除前:’, set1)
set1.pop()
print(‘删除后:’, set1)


第一次执行输出:



删除前: {‘ddd’, ‘bbb’, ‘aaa’, ‘ccc’}
删除后: {‘bbb’, ‘aaa’, ‘ccc’}


第二次执行输出:



删除前: {‘ddd’, ‘aaa’, ‘ccc’, ‘bbb’}
删除后: {‘aaa’, ‘ccc’, ‘bbb’}


多次执行可以发现,每次集合中的元素排序都是随机的,而 pop()  也会 “随机” 的删除集合中的第一个元素。


  

### 1.3、混合情况


当集合中的元素有字符串、整形、元组等「混合」组合时,元素的排序会变得随机,当然, pop()  仍然会固执地删除第一个元素。



set1 = {(1, 2), (5, 6), (9, 8), (3, 4), ‘aaa’, 1, 2}

print(‘删除前:’, set1)
set1.pop()
print(‘删除后:’, set1)


输出:



删除前: {‘aaa’, 1, 2, (1, 2), (3, 4), (9, 8), (5, 6)}
删除后: {1, 2, (1, 2), (3, 4), (9, 8), (5, 6)}


  

## 2、空集合


使用 pop()  的集合,必须有元素,「空集合」会报错 KeyError。



set2 = set()

set2.pop()


输出:


![在这里插入图片描述](https://img-blog.csdnimg.cn/f17bd5d980e247f78b741dc7921a317d.png)


这种格式的‘空集合’ 也会报错



set1 = {}

set1.pop()


输出:


![在这里插入图片描述](https://img-blog.csdnimg.cn/73a3e05025e341028e7eb1aeb4cddbde.png)


实际上,这并不是集合,而是字典



set1 = {}
print(type(set1))


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值