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


相关文章
|
7月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
450 2
|
7月前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
555 0
|
8月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
578 1
|
8月前
|
人工智能 数据安全/隐私保护 异构计算
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
1332 8
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
|
8月前
|
算法 调度 决策智能
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
265 0
|
存储 数据处理 Python
python的set集合:如何利用Python的Set集合来优化数据处理
python的set集合:如何利用Python的Set集合来优化数据处理
|
存储 数据处理 Python
Python中的Set集合:高效数据处理的利器
Python中的Set集合:高效数据处理的利器
408 0
|
Python
【Python 3】Set集合的解析与使用
文章介绍了Python中Set集合的用法,包括如何创建集合、添加和删除元素,以及如何进行元素计数和成员资格检查。
258 0
|
程序员 索引 Python
06-python数据容器-set(集合)入门基础操作
06-python数据容器-set(集合)入门基础操作
|
索引 Python 容器
上手Python之set(集合)
上手Python之set(集合)
上手Python之set(集合)

推荐镜像

更多