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个用例。
|