Python中如何结合is与in判断同一对象是否存在于列表中
解决方案
你可以用any()内置函数配合生成器表达式实现一行式的身份校验,写法比自定义函数简洁很多,完全符合你的需求:
修改后的判断语句
把你原代码中的
if a in ls:
替换为:
if any(e is a for e in ls):
修改后完整代码运行时,any()会逐个遍历列表元素做身份比对,只有元素和a是同一个对象才会返回True,就会输出你期望的Print this line instead。
原理说明
any()会迭代传入的生成器,只要有一个元素满足e is a的条件就立刻返回True,遍历完所有元素都不满足则返回False,逻辑和你自定义的isIn函数完全一致,没有额外性能损耗。- 如果需要多次对同一个列表做身份存在性判断,可以提前把列表所有元素的id存为集合,后续判断效率更高:
# 初始化一次即可 id_set = set(id(e) for e in ls) # 后续判断直接查集合,O(1)复杂度 if id(a) in id_set:
内容的提问来源于stack exchange,提问作者12431234123412341234123
相关产品推荐
相关产品推荐

