簡體   English   中英

為什么Python按順序打印一組數字

[英]Why does Python print a set of numbers as ordered

我嘗試在 python 空閑 {6,3,7} 中打印此內容。 output 是 {3,6,7}。 集合不應該是無序的並且每次都打印不同的順序嗎? 是否與 hash 地圖的構建方式有關?

Python 中的集合確實是無序的。 您的特定示例集恰好在迭代時以明顯排序的順序給出元素(並且在 python 2.7.6 和 3.4.3 中似乎可重現)這一事實並不能否定這一事實,另一個示例以既不是它們被添加到集合中的順序,也不是排序的。

>>> list(set([6,3,7]))
[3, 6, 7]

>>> list(set([6,3,8]))
[8, 3, 6]

對於值 6、3 和 8,在包含這些值的 python 集合上的迭代將產生元素的順序至少看起來是一致的,無論填充集合的順序如何。 然而,這並沒有說明這個結果是否普遍正確,無論如何它應該被視為一個實現細節。 用戶代碼根本不應假定任何排序。

>>> from sympy.utilities.iterables import multiset_permutations
>>> for p in multiset_permutations([3,6,8]): print(p, list(set(p)))
... 
([3, 6, 8], [8, 3, 6])
([3, 8, 6], [8, 3, 6])
([6, 3, 8], [8, 3, 6])
([6, 8, 3], [8, 3, 6])
([8, 3, 6], [8, 3, 6])
([8, 6, 3], [8, 3, 6])

看,我理解你的擔心,當我第一次看到它時,我一開始也很困惑。 但我敢肯定,你知道集合是無序和無索引的。 因此,任何集合的元素都不可能是有序的。 嘗試運行類似a = {6,2,90,4,12,0,4000,345}或您的示例 - 在 Jupyter Notebook、IDLE 或通過命令提示符。 它的排列方式不同。

在 Jupyter 上,它給出: {0, 2, 4, 6, 12, 90, 345, 4000}

在命令提示符下: {0, 4000, 2, 4, 6, 12, 345, 90}

而當你一個一個地打印一個集合的元素時,它會按順序顯示:

4000
2
4
6
12
345
90

我相信您正在嘗試使用 Jupyter。 當您想在這里看到像a這樣的變量時,它們似乎總是對其進行排序。

對於您的疑問,hash map 概念適用於字典,而不適用於集合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM