if object in lst:
#do something据我所知,当您执行这条语句时,它在内部检查object和lst中的每个元素之间的==,这将引用这两个对象的__eq__方法。这可能意味着两个不同的对象是“相等的”,如果它们的所有属性都相同,这通常是所需的。
然而,有没有一种方法可以在底层相等检查为is的情况下,以Pythonically的方式实现像in这样的谓词--也就是说,我们实际上是在检查这两个引用是否指向同一个对象?
发布于 2019-11-06 04:13:07
使用any函数:
if any(x is object for x in lst):
# ...发布于 2019-11-06 04:24:42
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的答案是使用生成器检查。
发布于 2019-11-06 04:13:13
如果您想专门使用is,那么只需使用filter,如:
filtered_list = filter(lambda n: n is object, list)https://stackoverflow.com/questions/58718720
复制相似问题