【发布时间】:2021-09-03 12:26:35
【问题描述】:
我有一个对象a 和一个列表,我想检查对象a 是否在该列表中。这意味着具有相同 id 的相同对象。要比较a 和该列表中的单个项目,我会使用is 关键字,类似于a is ls[0],而不是==,因为== 会比较两者的值,而不是它们是否是同一个对象.我知道 in 关键字来查看列表是否包含值但比较值(类似于 ==)而不是对象。
考虑以下代码:
class Foo(object):
def __init__(self,value):
self.value=value
def __eq__(self,other):
return True
a=Foo(0)
b=Foo(1)
if a is b:
print("Error, a is b")
exit()
ls=[b]
if b is not ls[0]:
print("Error, b is not ls[0]")
exit()
if a in ls:
print("Don't print this line")
else:
print("Print this line instead")
如何更改if 语句以便打印"Print this line instead"?
将其更改为 if a is in ls: 或 if a in is ls: 会出现语法错误。是的,我知道我可以制作这样的功能:
def isIn(object,ls):
for e in ls:
if e is object:
return True
return False
但这看起来很笨拙,有没有更好的方法?
【问题讨论】:
-
你可以试试
id(a) in map(id, ls) -
any(a is b for b in ls) -
@Epsi95 很好的答案,为什么将它们放在评论中而不创建答案?
-
@deceze 很好的答案,你为什么将它们放在评论中而不创建答案?
-
因为已经有很多关于这个的现有答案,比如这个已经被关闭的副本......作为......作为......的副本......无论如何,你知道我的意思。
标签: python