0
点赞
收藏
分享

微信扫一扫

Python set 的pop()方法 返回元素并不随机


Python文档中对set的pop()方法描述:

​pop​​()

从集合中移除并返回任意一个元素。 如果集合为空则会引发 ​​KeyError​​。

但实际上,调用set的pop()方法是某种顺序pop元素的。

if __name__ == '__main__':
for e in range(10):
ss = set()
arr = []
for i in range(4):
ss.add(i)
print(ss)
for i in range(4):
arr.append(ss.pop())
print(arr)

10次运行的结果都是

{0, 1, 2, 3}
[0, 1, 2, 3]

 我们改变一下添加顺序,for i in range(10,0,-1)

if __name__ == '__main__':
for e in range(10):
ss = set()
arr = []
for i in range(10,0,-1):
ss.add(i)
print(ss)
for i in range(10):
arr.append(ss.pop())
print(arr)

 每次得到结果仍然是按从小到大排序的。似乎()set pop()顺序是升序排列的。

{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

 我们在看一下-10到10的数字:for i in range(10,-10,-1):

if __name__ == '__main__':
for e in range(10):
ss = set()
arr = []
for i in range(10,-10,-1):
ss.add(i)
print(ss)
for i in range(20):
arr.append(ss.pop())
print(arr)

 10次的结果都是

{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -1, -9, -8, -7, -6, -5, -4, -3, -2}
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -1, -9, -8, -7, -6, -5, -4, -3, -2]

 但是并不是升序排序的。

总结:set pop()是按某种顺序进行的,而不是随机的。并且每次执行的结果都一样。


今天(2022/4/13)每日一题​​380. O(1) 时间插入、删除和获取随机元素 - 力扣(LeetCode) (leetcode-cn.com)​​

如果用set做,获取随机元素无法通过第17个用例。

举报

相关推荐

0 条评论