我想了解哪些項目可以在Python中以set
成員資格進行測試。一般來說,設置成員資格測試的工作方式類似於Python中的list
成員資格測試。是什麼讓一個元素有資格在Python中進行集合成員資格測試?
>>> 1 in {1,2,3}
True
>>> 0 in {1,2,3}
False
>>>
但是,集合與列表不同,因爲它們不能包含不可對象,例如嵌套集合。
名單,好嗎:
>>> [1,2,{1,2}]
[1, 2, {1, 2}]
>>>
組不工作,因爲unhashable:
>>> {1,2,{1,2}}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'
>>>
現在,即使集不能是其他組的成員,我們可以使用它們在會員測試中。這樣的檢查不會導致錯誤。
>>> {1} in {1,2,3}
False
>>> {1,2} in {1,2,3}
False
>>> set() in {1,2,3}
False
>>>
但是,如果我嘗試做當被測試的元件相同的測試是dict
,我得到這表明,被測試的元素不能unhashable錯誤。
>>> {'a':1} in {1,2}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
>>> {} in {1,2}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
>>>
那不可能是故事的全部,因爲set
可以會員資格測試在另一組,即使它本身就是unhashable,給人一種結果,而不是一個錯誤。
所以問題是:是什麼讓一個元素有資格在Python中進行集合成員測試?
呃,frozensets * *也不能容納unhashable項目 - 不同的是,它們本身可哈希 – jonrsharpe
感謝您指出了這一點。它應該指的是冷凍集是一個可能的成員,但我的文本沒有反映出這一點。編輯相關評論。 – Forald