Python Set pop() 方法
描述
pop() 方法用于移除并返回集合中的一个随机元素。如果集合为空,会抛出 KeyError 异常。
语法
pop() 方法语法:
set.pop()
参数
- 无
返回值
返回移除的元素。
实例
随机移除一个元素:
实例 1
fruits = {"apple", "banana", "cherry"}
fruits.pop()
print(fruits)
输出结果为:
{'apple', 'banana'}
输出返回值:
实例 1
fruits = {"apple", "banana", "cherry"}
x = fruits.pop()
print(x)
输出结果为:
banana
注意事项
- 集合中的元素是无序的,因此每次调用
pop()方法时,被移除的元素是随机的。 - 如果需要移除特定的元素,应该使用
remove()或discard()方法,而不是pop()。
Python 集合
家和
434***789@qq.com
参考地址
我在学习过程中发现, set 集合的 pop() 方法, 不像上面所述的那样, 只是随机删除一个元素, 而是有一定的规律可循的, 我将我发现的规律总结如下:
# 执行下面的代码,并查看输出结果: print('pop()函数的输出结果 看这里:') s1={4,2,1,5} # 集合里只有数字 s2={'你','我','他'} # 集合里无数字 s3={3,2,4,'你','X'} # 集合里既有数字又有非数字 s1.pop() # 元素是数字时, 删除最小的数字, 其余数字升序排列 s2.pop() # 元素非数字时, 随机删除一个元素, 其余元素随机排序 s3.pop() # 元素既有数字又含非数字时, 如果删除的是数字, 则一定删最小的, 否则随机删除一个非数字元素 print(s1) print(s2) print(s3) # 这个代码执行后, 输出的结果是随机的下面是打印的结果 1(随机删除一个非数字的元素):
pop()函数的输出结果 看这里: {2, 4, 5} {'你', '我'} {2, 3, 4, 'X'}下面是结果2(删除的是数字, 但删的是最小的数字, 其余数字元素升序排列, 非数字元素随机排列):
pop()函数的输出结果 看这里: {2, 4, 5} {'我', '你'} {3, 4, 'X', '你'}下面是结果3(删除的是数字, 但删的是最小的数字, 其余数字元素升序排列, 非数字元素随机排列):
pop()函数的输出结果 看这里: {2, 4, 5} {'他', '你'} {3, 4, '你', 'X'}总结:
1、如果集合的元素都是数字, 删除时, 删掉的是最小的数字, 其余数字升序排列
2、如果集合的元素是非数字, 删除时, 删掉的是随机的元素, 其余元素随机排列
3、如果集合里既有数字又有非数字元素, 删除时:
家和
434***789@qq.com
参考地址
积木君-学习中
zha***anpei6@sina.com
补充楼上的,对于数字的删除,内容相同的集合多次执行结果完全相同,但是不一定是最小数字,而是呈现类似字符串的比较规律,即2为最高位数字在1为最高位数字之后删除。但是对于1和100的删除顺序依然未知(不同集合中结果不一样)
以下是测试代码:
def print_pop(): b = {1, 10, 20, 100} print(b.pop(), end="\t") print(b.pop(), end="\t") print(b.pop(), end="\t") print("number only \n") d = {1, 10, 20, 100, 101, 200} print(d.pop(), end="\t") print(d.pop(), end="\t") print(d.pop(), end="\t") print("another number only \n") print_pop()以下是测试结果:
积木君-学习中
zha***anpei6@sina.com
ygx800217
831***90@qq.com
补充楼上的,对于 2 为最高位数学在1为最高位数学之后删除的说法是不一定。但是内容相同的集合多次执行结果完全相同,这一点可以确定。 以下是测试代码:
A:
b={111,10,20,100} print(b.pop(),end='\t') print(b.pop(),end='\t') print(b.pop(),end='\n') d={1,10,20,100,101,200} print(d.pop(),end='\t') print(d.pop(),end='\t') print(d.pop(),end='\t')以下是测试结果:
B:
b={111,10,201,100} print(b.pop(),end='\t') print(b.pop(),end='\t') print(b.pop(),end='\n') d={1,10,20,100,101,200} print(d.pop(),end='\t') print(d.pop(),end='\t') print(d.pop(),end='\t')以下是测试结果:
ygx800217
831***90@qq.com
antilina
285***4560@qq.com
补充一下,版本是3.11.2:
对于 set.pop() 的删除顺序,我发现它和该集合在内存中存储的实际顺序有关,有以下语句:
>>>d = {1,10,20,100,101,200} >>>d {1,100,101,20,200,10} >>>d.pop() 1 >>>d.pop() 100 >>>d.pop() 101 >>>d.pop() 20 >>>d.pop() 200 >>>d.pop() 10会发现,set.pop()每次删除set中第一个元素,但是由于d的内容存储顺序是1,100,101,20,200,10,所以会按照这个顺序依次删除;对于set中只有非数字元素的情况,随机的其实是集合内容的存储顺序,每次赋值内容顺序改变,但是pop仍然按照从左到右的顺序依次删除,所以看起来就是重复赋值,删除结果不同。
>>>d = {'你','我','他'} >>>d {'你','他','我'} >>>d.pop() '你' >>>d.pop() '他' >>>d.pop() '我'antilina
285***4560@qq.com