提问人:Josh Katofsky 提问时间:11/6/2019 最后编辑:John KugelmanJosh Katofsky 更新时间:11/6/2019 访问量:162
使用“is”标识而不是“==”等式检查对象是否处于可迭代状态
Check if object is in an iterable using "is" identity instead of "==" equality
问:
if object in lst:
#do something
据我所知,当您执行此语句时,它会在内部检查 和 中的每个元素之间,这将引用这两个对象的方法。这可能意味着两个不同的对象“相等”,如果它们的所有属性都相同,则通常需要这样做。==
object
lst
__eq__
但是,有没有办法以 Python 方式实现谓词,例如底层相等性检查的位置 - 即我们实际上是在检查两个引用是否指向同一对象?in
is
答:
0赞
kaya3
11/6/2019
#1
使用以下函数:any
if any(x is object for x in lst):
# ...
0赞
William Bright
11/6/2019
#2
如果你想专门使用,那么只需使用过滤器,如:is
filtered_list = filter(lambda n: n is object, list)
1赞
Brian
11/6/2019
#3
3Python 中的列表成员资格由 __contains__ dunder 方法决定。如果要使用正常的 “” 语法,可以选择为自定义实现覆盖此内容:in
class my_list(list):
def __contains__(self, x):
for y in self:
if x is y:
return True
return False
4 in my_list([4, [3,2,1]])
>> True
[3,2,1] in my_list([4, [3,2,1]]) # Because while the lists are "==" equal, they have different pointers.
>>> False
否则,我会建议 kaya3 使用生成器检查的答案。
上一个:在键乱序时比较字典列表
评论