This question already has answers here:
How/why does set() in {frozenset()} work?
(2个答案)
2年前关闭。
我想了解可以在Python中测试哪些项目的
但是,集与列表的不同之处在于它们不能包含不可散列的对象,例如嵌套集。
列表,可以:
设置,因为无法哈希,所以不起作用:
现在,即使集合不能成为其他集合的成员,我们也可以在成员资格测试中使用它们。这样的检查不会导致错误。
但是,如果我尝试在被测元素是
那不可能是全部,因为
所以问题是:是什么让元素有资格使用Python中的一组成员资格测试?
设置了唯一可用于包含检查的不可哈希对象。如documentation -中所给
为了支持搜索与集合具有相同元素的卡住集合,将集合暂时突变为
(2个答案)
2年前关闭。
我想了解可以在Python中测试哪些项目的
set
成员资格。通常,集合成员资格测试的工作方式类似于Python中的list
成员资格测试。>>> 1 in {1,2,3}
True
>>> 0 in {1,2,3}
False
>>>
但是,集与列表的不同之处在于它们不能包含不可散列的对象,例如嵌套集。
列表,可以:
>>> [1,2,{1,2}]
[1, 2, {1, 2}]
>>>
设置,因为无法哈希,所以不起作用:
>>> {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中的一组成员资格测试?
最佳答案
您无法测试set
中不可哈希元素的成员资格。例子 -
>>> [1,2] in {1,2}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> {1:2} in {1,2}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
设置了唯一可用于包含检查的不可哈希对象。如documentation -中所给
为了支持搜索与集合具有相同元素的卡住集合,将集合暂时突变为
frozenset()
并进行比较。例子 ->>> set([1,2]) in {1,2,frozenset([1,2])}
True
关于python - 是什么使元素有资格使用Python进行设置的成员资格测试?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32232182/
10-12 16:54