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


相关文章
|
3月前
|
机器学习/深度学习 Python
堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能
本文深入探讨了堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能。文章详细介绍了堆叠的实现步骤,包括数据准备、基础模型训练、新训练集构建及元学习器训练,并讨论了其优缺点。
130 3
|
12天前
|
人工智能 自然语言处理 算法
随机的暴力美学蒙特卡洛方法 | python小知识
蒙特卡洛方法是一种基于随机采样的计算算法,广泛应用于物理学、金融、工程等领域。它通过重复随机采样来解决复杂问题,尤其适用于难以用解析方法求解的情况。该方法起源于二战期间的曼哈顿计划,由斯坦尼斯拉夫·乌拉姆等人提出。核心思想是通过大量随机样本来近似真实结果,如估算π值的经典示例。蒙特卡洛树搜索(MCTS)是其高级应用,常用于游戏AI和决策优化。Python中可通过简单代码实现蒙特卡洛方法,展示其在文本生成等领域的潜力。随着计算能力提升,蒙特卡洛方法的应用范围不断扩大,成为处理不确定性和复杂系统的重要工具。
49 21
|
10天前
|
数据挖掘 数据处理 开发者
Python3 自定义排序详解:方法与示例
Python的排序功能强大且灵活,主要通过`sorted()`函数和列表的`sort()`方法实现。两者均支持`key`参数自定义排序规则。本文详细介绍了基础排序、按字符串长度或元组元素排序、降序排序、多条件排序及使用`lambda`表达式和`functools.cmp_to_key`进行复杂排序。通过示例展示了如何对简单数据类型、字典、类对象及复杂数据结构(如列车信息)进行排序。掌握这些技巧可以显著提升数据处理能力,为编程提供更强大的支持。
24 10
|
2月前
|
Java Maven Spring
【SpringBug】lombok插件失效,但是没有报错信息,@Data不能生成get和set方法
解决写了@Data注解,但是在测试文件中生成的反编译target文件Us二Info中没有get和set方法
216 15
|
2月前
|
安全
Python-打印99乘法表的两种方法
本文详细介绍了两种实现99乘法表的方法:使用`while`循环和`for`循环。每种方法都包括了步骤解析、代码演示及优缺点分析。文章旨在帮助编程初学者理解和掌握循环结构的应用,内容通俗易懂,适合编程新手阅读。博主表示欢迎读者反馈,共同进步。
|
2月前
|
JSON 安全 API
Python调用API接口的方法
Python调用API接口的方法
323 5
|
2月前
|
算法
你对Collection中Set、List、Map理解?
你对Collection中Set、List、Map理解?
77 18
你对Collection中Set、List、Map理解?
|
2月前
|
存储 缓存 安全
只会“有序无序”?面试官嫌弃的List、Set、Map回答!
小米,一位热衷于技术分享的程序员,通过与朋友小林的对话,详细解析了Java面试中常见的List、Set、Map三者之间的区别,不仅涵盖了它们的基本特性,还深入探讨了各自的实现原理及应用场景,帮助面试者更好地准备相关问题。
68 20
|
3月前
|
存储 C++ 容器
【C++】map、set基本用法
本文介绍了C++ STL中的`map`和`set`两种关联容器。`map`用于存储键值对,每个键唯一;而`set`存储唯一元素,不包含值。两者均基于红黑树实现,支持高效的查找、插入和删除操作。文中详细列举了它们的构造方法、迭代器、容量检查、元素修改等常用接口,并简要对比了`map`与`set`的主要差异。此外,还介绍了允许重复元素的`multiset`和`multimap`。
53 3
【C++】map、set基本用法
|
3月前
|
存储 算法 C++
【C++】unordered_map(set)
C++中的`unordered`容器(如`std::unordered_set`、`std::unordered_map`)基于哈希表实现,提供高效的查找、插入和删除操作。哈希表通过哈希函数将元素映射到特定的“桶”中,每个桶可存储一个或多个元素,以处理哈希冲突。主要组成部分包括哈希表、哈希函数、冲突处理机制、负载因子和再散列,以及迭代器。哈希函数用于计算元素的哈希值,冲突通过开链法解决,负载因子控制哈希表的扩展。迭代器支持遍历容器中的元素。`unordered_map`和`unordered_set`的插入、查找和删除操作在理想情况下时间复杂度为O(1),但在冲突较多时可能退化为O(n)。
34 5

热门文章

最新文章