簡體   English   中英

在python中創建集合的元組是否總是導致相同的元組

[英]Does creating a tuple of a set in python always result in the same tuple

在我的代碼中,我將集合轉換為元組,以便將其用作字典鍵。 由於集合沒有順序,而元組則有順序,因此似乎:

tuple(some_set)

由於必須創建訂單,因此不能每次都保證相同的元組。 但是,通過在實踐中進行測試,似乎每次將給定的集合轉換為相同的元組,如以下代碼打印1所示。

my_tuples = set()

for i in range(100000000):
    my_tuples.add(tuple(set(range(100))))


print(len(my_tuples))

我找不到與此有關的任何文檔,但是tuple()函數是否總是在給定集合上返回相同的元組嗎? 並且在某處有明確說明嗎?

集合不是“隨機”排序的,它們是根據可能發生變化的內部邏輯排序的(例如,在不同的Python版本中)。 在開發過程中應忽略此內部邏輯,並且您應將集合視為沒有任何順序。

確實,

set([-1,-2]) == set([-2,-1]) # is True

tuple(set([-1,-2])) == tuple(set([-2,-1])) # is False

如果您看一下這兩個元組是什么,您會發現tuple(set([-1,-2])), tuple(set([-2,-1]))((-1, -2), (-2, -1))

因此,集合中元素的插入順序會影響它們隨后進行迭代的方式,並且由於tuple()基於集合的迭代器,因此結果就是您在上面看到的結果。

最后,如果您不打算更改“上下文”(例如python版本),並且總是在相同的情況下創建集合,則可以放心地假定元素的順序將相同( 但是請注意,在編寫明天將要扔掉的東西的腳本時,這可能是可以接受的,但在其他地方則不能 )。

整數對自己散列:

example=[5,0,1,2,3,4]
print(set(example))

輸出:

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

拿出不會按排序順序排列的整數集的示例並不難。

example=[-5,0,1,2,3,4]
print(set(example))

輸出:

{0, 1, 2, 3, 4, -5}

暫無
暫無

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

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