是内部排序集,还是显示排序列表的__str__方法?

 蜡笔小昕廖廖 发布于 2023-01-10 11:34

我有一个set,我添加项目(整数),当我打印它时,项目显然是排序的:

a = set()
a.add(3)
a.add(2)
a.add(4)
a.add(1)
a.add(5)

print a
# set([1, 2, 3, 4, 5])

我尝试过各种各样的价值观,显然它只需要整数.

我在MacOSX下运行Python 2.7.5.它也使用repl.it进行复制(参见http://repl.it/TpV)

问题是:这是在某处记录的(到目前为止还没有找到),这是正常的,是否可以依赖?

额外的问题:什么时候完成排序?在印刷期间?它内部存储排序?(考虑到预期的插入复杂性,这是否可能?)

1 个回答
  • 这是巧合.数据既没有排序也没有__str__排序.

    整数的哈希值等于它们的值(除了范围-1之外的长整数sys.maxint),这增加了整数按顺序排列的机会,但这不是给定的.

    set使用哈希表来跟踪包含的项目,并且排序取决于哈希值以及插入和删除历史记录.

    整数和集合之间交互的方式和原因都是实现细节,并且可以随版本的不同而变化.Python 3.3为某些类型引入了哈希随机化,Python 3.4对此进行了扩展,使得Python流程重启之间的集合和字典的排序也变得不稳定(取决于存储的值的类型).

    2023-01-10 11:37 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有