Skip to main content
 首页 » 编程设计

python之通过 id 从对象列表中检索

2025年05月04日14TianFang

在下面的代码中,我创建了一个包含三个对象的列表,并使用变量 a、b、c 按其 ID 存储第一个、第二个和第三个对象,但是当我尝试将第三个对象存储在变量 c 中时,它存储第二个和第三个对象的列表。

class Obj1(): 
    id='obj1' 
 
class Obj2(): 
    id='obj2' 
 
class Obj3(): 
    id='obj3' 
 
list1=[Obj1(),Obj2(),Obj3()] 
 
a=list1[id=="obj1"] 
print a 
 
b=list1[id!='obj1'] 
print b 
 
c=list1[id!='obj1'and id!='obj2':] 
print c 

当我运行这段代码时,我得到:

<__main__.Obj1 instance at 0x02AD5DA0> 
<__main__.Obj2 instance at 0x02AD9030> 
[<__main__.Obj2 instance at 0x02AD9030>, <__main__.Obj3 instance at 0x02AD90A8>] 

为什么变量c包含两个对象?

请您参考如下方法:

如 Medhat 所述,在这种情况下使用字典可能是最好的主意。但是,您可以使用与您尝试使用列表推导式类似的方式来做事:

a = [e for e in list1 if e.id == "obj1"] 
print a 
 
b = [e for e in list1 if e.id != "obj1"] 
print b 
 
c = [e for e in list1 if e.id != "obj1" and e.id != "obj2"] 
# Or: 
# [e for e in list1 if e.id not in ("obj1", "obj2")] 
print c