python中哪些是无序_关于无序集合:无序集合 – 在python中设置

本问题已经有最佳答案,请猛点这里访问。

很抱歉,如果这是一个基本问题,但是我想了解set类型在python中是如何工作的。

来自文档:

A set object is an unordered collection of distinct hashable objects.

Being an unordered collection, sets do not record element position or order of insertion.

但是,如果它们没有顺序,为什么我在这个测试中总是得到相同的顺序呢?我在等一些随机的订单。

users_ids = set([1, 1, 2, 3])

>>> print users_ids

set([1, 2, 3])

因为您使用的是整数,所以它们将按顺序散列。

@这并不总是。它还取决于整数的大小

@SMAC89这是一个公平的观点。

随机顺序不是无序的。无序意味着没有定义的数据排序方式,即插入顺序或数据与数据排列方式没有任何关联。

数据总是以可预测的顺序排列的原因,因为发生这种情况时,特定的实现选择始终以插入顺序指示数据顺序的方式排列元素。但是,不能保证会发生这种情况,我们确实在python 3.x字典实现中看到了这种偏差。

注意,即使我们看到数据已排序,

>>> {1,2,3,4,5}

set([1, 2, 3, 4, 5])

我们仍然称之为无序,除非文件严格规定并保证其订单,否则可能会有惊喜等待您。我见过依赖于集合和字典在插入模式中保持有序的事实的实现。当这些实现被移植到python 3.x时,会产生严重的后果。

γ

What’s New In Python 3.3

Security improvements:

Hash randomization is switched on by default.

您将共享一个描述Python3.x字典实现的链接,以及它与Python2.x的区别吗?

让我看看我是否理解。在python 2.7中,集合是无序的,但特定的实现保持插入顺序?!在这种情况下,它们可能是订购的,但在未来的版本中不能保证。我的理解正确吗?

@但是,3.3以后的差异是由于散列的随机性-请参阅stackoverflow.com/a/14959001/3001761

@用户2990084:说它保持插入顺序是错误的,但我的意思是,每次以特定的顺序插入相同的数据时,字典都会以定义的方式维护。

@用户2990084:我已经用链接更新了答案。

@用户2990084看到保留顺序的原因是您使用的是顺序整数。python 2.x散列的方式,您的示例恰好是"有序的"。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值