Что делает элемент пригодным для тестирования набора членства в Python? [Дубликат]
На этот вопрос уже есть ответ:
Как / почему set () в {frozenset ()} работает? 2 ответа Я хотел бы понять, какие элементы можно проверить наset
членство в Python. В общем, тестирование набора членства работает какlist
тестирование членства в Python.
>>> 1 in {1,2,3}
True
>>> 0 in {1,2,3}
False
>>>
Однако наборы отличаются от списков тем, что они не могут содержать недоступные объекты, например, вложенные наборы.
Список, ладно:
>>> [1,2,{1,2}]
[1, 2, {1, 2}]
>>>
Set, не работает, потому что 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
, Я получаю сообщение об ошибке, из которого следует, что проверяемый элемент не может быть недоступен.
>>> {'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
може быть проверенным на членство в другом наборе, даже если он сам по себе не подлежит определению, давая результат, а не ошибку.
Так что вопрос такой: Что делает элемент пригодным для тестирования набора членства в Python?