簡體   English   中英

Python 中元組和凍結集的區別

[英]Difference between tuples and frozensets in Python

我正在使用 The Quick Python Book 學習 Python 3,其中作者談到了frozensets,指出由於集合是可變的,因此不可散列,因此不適合作為字典鍵,因此引入了它們的凍結對應物。 除了元組是有序數據結構而frozenset或更一般的集合是無序的明顯區別之外,元組和frozenset之間還有其他區別嗎?

tuples是不可變的listsfrozensets是不可變的sets

tuples確實是對象的有序集合,但它們可以包含重復和不可散列的對象,並具有切片功能

frozensets沒有索引,但你有sets的功能 - O(1) 元素查找,以及聯合和交叉等功能。 它們也不能包含重復項,就像它們的可變副本一樣。

有點違反直覺 - 這個 bon mot 怎么樣:

sss = frozenset('abc')
sss |= set('efg')

將產生:

frozenset(['a', 'c', 'b', 'e', 'g', 'f'])

當然,這等價於 x = x | 是的,所以不改變原始的frozenset,但它並沒有對代碼審查者對術語“不可變”進行嘲諷!

想到的一個區別是重復問題。 一個(1, 1, 1, 1, 2, 2, 2)元組正是你所期望的,但frozenset會刪除所有這些重復項,讓你得到frozenset([1, 2])

Volatility 確實提到了frozensets 沒有被索引。 我正在查看其他功能,所以沒有立即意識到標准 python 切片是不可能的。

a = frozenset((1, 1, 1, 1, 2, 2, 2))  # results in frozenset([1, 2])
print a[0] 

會報錯:

TypeError: 'frozenset' object does not support indexing

很明顯,它沒有被索引,但盡管值得在這里明確添加

暫無
暫無

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

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