python中哪些是无序_关于无序集合:无序集合 – 在python中设置
本問(wèn)題已經(jīng)有最佳答案,請(qǐng)猛點(diǎn)這里訪問(wèn)。
很抱歉,如果這是一個(gè)基本問(wèn)題,但是我想了解set類(lèi)型在python中是如何工作的。
來(lái)自文檔:
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.
號(hào)
但是,如果它們沒(méi)有順序,為什么我在這個(gè)測(cè)試中總是得到相同的順序呢?我在等一些隨機(jī)的訂單。
users_ids = set([1, 1, 2, 3])
>>> print users_ids
set([1, 2, 3])
因?yàn)槟褂玫氖钦麛?shù),所以它們將按順序散列。
@這并不總是。它還取決于整數(shù)的大小
@SMAC89這是一個(gè)公平的觀點(diǎn)。
隨機(jī)順序不是無(wú)序的。無(wú)序意味著沒(méi)有定義的數(shù)據(jù)排序方式,即插入順序或數(shù)據(jù)與數(shù)據(jù)排列方式?jīng)]有任何關(guān)聯(lián)。
數(shù)據(jù)總是以可預(yù)測(cè)的順序排列的原因,因?yàn)榘l(fā)生這種情況時(shí),特定的實(shí)現(xiàn)選擇始終以插入順序指示數(shù)據(jù)順序的方式排列元素。但是,不能保證會(huì)發(fā)生這種情況,我們確實(shí)在python 3.x字典實(shí)現(xiàn)中看到了這種偏差。
注意,即使我們看到數(shù)據(jù)已排序,
>>> {1,2,3,4,5}
set([1, 2, 3, 4, 5])
我們?nèi)匀环Q(chēng)之為無(wú)序,除非文件嚴(yán)格規(guī)定并保證其訂單,否則可能會(huì)有驚喜等待您。我見(jiàn)過(guò)依賴(lài)于集合和字典在插入模式中保持有序的事實(shí)的實(shí)現(xiàn)。當(dāng)這些實(shí)現(xiàn)被移植到python 3.x時(shí),會(huì)產(chǎn)生嚴(yán)重的后果。
γ
What’s New In Python 3.3
Security improvements:
Hash randomization is switched on by default.
號(hào)
您將共享一個(gè)描述Python3.x字典實(shí)現(xiàn)的鏈接,以及它與Python2.x的區(qū)別嗎?
讓我看看我是否理解。在python 2.7中,集合是無(wú)序的,但特定的實(shí)現(xiàn)保持插入順序?!在這種情況下,它們可能是訂購(gòu)的,但在未來(lái)的版本中不能保證。我的理解正確嗎?
@但是,3.3以后的差異是由于散列的隨機(jī)性-請(qǐng)參閱stackoverflow.com/a/14959001/3001761
@用戶(hù)2990084:說(shuō)它保持插入順序是錯(cuò)誤的,但我的意思是,每次以特定的順序插入相同的數(shù)據(jù)時(shí),字典都會(huì)以定義的方式維護(hù)。
@用戶(hù)2990084:我已經(jīng)用鏈接更新了答案。
@用戶(hù)2990084看到保留順序的原因是您使用的是順序整數(shù)。python 2.x散列的方式,您的示例恰好是"有序的"。
總結(jié)
以上是生活随笔為你收集整理的python中哪些是无序_关于无序集合:无序集合 – 在python中设置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【考研英语语法】写作中的复杂名词短语
- 下一篇: ubuntu18.04 opencv 获