if object in lst:
#do something
据我所知,执行此语句时,它是内部检查==
与object
中每个元素之间的lst
,后者将引用__eq__
这两个对象的方法。这可能意味着两个不同的对象是“相等的”,如果它们的所有属性都相同,通常就需要这样做。
但是,有没有一种方法可以通过Python实现诸如in
之类的谓词,其中基础相等性检查为is
-即我们实际上是在检查两个引用是否指向同一个对象? / p>
if object in lst:
#do something
据我所知,执行此语句时,它是内部检查==
与object
中每个元素之间的lst
,后者将引用__eq__
这两个对象的方法。这可能意味着两个不同的对象是“相等的”,如果它们的所有属性都相同,通常就需要这样做。
但是,有没有一种方法可以通过Python实现诸如in
之类的谓词,其中基础相等性检查为is
-即我们实际上是在检查两个引用是否指向同一个对象? / p>
使用any
函数:
if any(x is object for x in lst):
# ...
,
python中的 3list成员资格由__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,1] in my_list([4,1]]) # Because while the lists are "==" equal,they have different pointers.
>>> False
否则,我建议kaya3使用生成器检查的答案。
,如果您要专门使用is
,则只需使用以下过滤器即可:
filtered_list = filter(lambda n: n is object,list)