鱼C论坛

 找回密码
 立即注册
查看: 2073|回复: 7

[已解决]set.pop()是随机弹出元素吗?

[复制链接]
发表于 2019-3-6 20:17:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
>>> set1
{1, 2, 3, 4}
>>> set2 = set1.copy()
>>> set2.pop()
1
>>> set2 = set1.copy()
>>> set2.pop()
1
>>> set2 = set1.copy()
>>> set2.pop()
1


另外一个帖子上说集合的pop()方法是随机弹出一个元素,为啥我连续试验了3次都得到同一个值?连续3次巧合的概率是1/64,小概率事件了(p<0.05)......
最佳答案
1970-1-1 08:00:00
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-3-6 20:44:37 | 显示全部楼层
set 是一种哈希表,你的这几个  数只是 原色 hash值排序跟元素大小排序一致,所以才会一直 pop 出 1 来,你可以换几个没有规律的数,大小差较大的数试试。
换成字符串的话会更明显。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-6 23:06:06 From FishC Mobile | 显示全部楼层
集合的pop()方法如果不带参数的话是弹出集合的最后一个元素,还可以填写一个参数指明要弹出的元素的索引,比如:
a = [25,66,82,42]
a.pop()是弹出42
a.pop(1)是弹出66
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-6 23:09:06 From FishC Mobile | 显示全部楼层
另外你这个是在命令行里执行的,所以set2.pop()下边输出的1并不是指弹出了1,而是True的意思,也就是说这条语句正确执行了返回1,楼主如果想查看弹出的值的话可以这么写:
b = set2.pop()
print(b)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-6 23:09:58 From FishC Mobile | 显示全部楼层
建议练习这种长代码在idle里编写运行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-7 11:47:19 | 显示全部楼层
Sacura 发表于 2019-3-6 23:09
另外你这个是在命令行里执行的,所以set2.pop()下边输出的1并不是指弹出了1,而是True的意思,也就是说这条 ...

序列可以给pop()指定参数,但集合是无序的不能指定参数。
集合的pop()是真的弹出值来了:
>>> set2.pop()
1
>>> set2.pop()
2
>>> set2.pop()
3
>>> set2.pop()
4
>>> 再pop就报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-7 19:33:14 From FishC Mobile | 显示全部楼层
gaoshanliushui 发表于 2019-3-7 11:47
序列可以给pop()指定参数,但集合是无序的不能指定参数。
集合的pop()是真的弹出值来了:
>>> set2.pop ...

我以为你说的是序列。。。
集合的话在交互模式里调用pop()是弹出第一个元素,在shell中调用是随机弹出一个元素。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-29 01:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表