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

简介: 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次运行的结果都是

1. {0, 1, 2, 3}
2. [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个用例。


相关文章
|
1天前
|
Python
python中使用update()方法
【6月更文挑战第16天】
15 7
|
4天前
|
存储 缓存 调度
Python教程:一文了解10种数据结构在Python中的实现方法
数据结构是计算机科学中非常重要的概念,它用于组织和存储数据,使得数据可以高效地被访问和操作。在编程中,选择合适的数据结构对于解决问题和提高程序性能至关重要。
19 1
|
2天前
|
Python
Python优雅遍历字典删除元素的方法
本文详细介绍了Python优雅遍历字典删除元素的五种方法,字典推导式是删除字典中元素的最常见且最优雅的方法,因为它清晰、简洁且易于理解。其他方法可能在某些特定情况下有用,但通常不如字典推导式通用或高效。
7 0
|
2天前
|
机器学习/深度学习 算法 索引
Python梯度提升决策树的方法示例
本文简要介绍了Python梯度提升决策树的方法示例,包括鸢尾花(Iris)数据集进行分类、房价预测(回归)、垃圾邮件分类、特征选择等示例。
7 0
|
测试技术 Android开发 Python
|
开发框架 测试技术 索引
Python+Appium自动化测试(5)-appium元素定位常用方法(二)
appium继承了selenium框架中webdriver提供的元素定位方法,接下介绍几种常用的方法。
Python+Appium自动化测试(5)-appium元素定位常用方法(二)
|
测试技术 开发工具 Android开发
Python+Appium自动化测试(5)-appium元素定位常用方法(一)
对于Android而言,查找appUI界面元素属性的工具有三种:appium desktop,uiautomatorviewer.bat,weditor。之前已经介绍过了weditor的使用,这里我将通过使用uiautomatorview工具查看元素的属性值,来介绍Android app通过appium进行元素定位常用的几种方法。
Python+Appium自动化测试(5)-appium元素定位常用方法(一)
|
8天前
|
测试技术 虚拟化 云计算
GitHub高赞!速通Python编程基础手册,被玩出花了!
随着云时代的来临,Python 语言越来越被程序开发人员喜欢和使用,因为其不仅简单易学,而且还有丰富的第三方程序库和相应完善的管理工具。 从命令行脚本程序到 GUI程序,从图形技术到科学计算,从软件开发到自动化测试,从云计算到虚拟化,所有这些领域都有 Python 的身影。 今天给小伙伴们分享的这份手册采用以任务为导向的编写模式,全面地介绍了 Python 编程基础及其相关知识的应用,讲解了如何利用 Python 的知识解决部分实际问题。
GitHub高赞!速通Python编程基础手册,被玩出花了!
|
5天前
|
开发者 Python
【干货】Python编程惯例
【干货】Python编程惯例
11 1
|
8天前
|
Shell Python
GitHub星标破千Star!Python游戏编程的初学者指南
Python 是一种高级程序设计语言,因其简洁、易读及可扩展性日渐成为程序设计领域备受推崇的语言。 目前的编程书籍大多分为两种类型。第一种,与其说是教编程的书,倒不如说是在教“游戏制作软件”,或教授使用一种呆板的语言,使得编程“简单”到不再是编程。而第二种,它们就像是教数学课一样教编程:所有的原理和概念都以小的应用程序的方式呈现给读者。