在下面的代码中,我创建了一个包含三个对象的列表,并使用变量a,b,c通过它们的id存储第一个,第二个,然后第三个对象,但是当我尝试将第三个对象存储在变量c中,它存储第二个和第三个对象的列表。Python:通过id从对象列表中检索
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包含两个对象?
除了我提供的例子之外,我所面临的主要问题是我需要从对象内部的对象列表中提取id此解决方案效果最佳。无需将列表转换为字典,您的代码是最高效的,并且完全符合我的需求。 – Rmor91 2014-09-24 04:02:15
我会添加一件东西,从列表中检索对象:a = [e for list1中的e,如果e.id!=“obj1”] [0]。否则变量存储1个对象的列表 – Rmor91 2014-09-24 04:31:02
很高兴帮助。请注意,对于您构建的每个新列表,列表理解必须迭代列表中的每个元素。对于小列表来说很好,但是如果你有很大的列表,它可能会很慢。一个简单的字典查询可以在不变的时间内运行,所以如果可能的话,这对于大量的对象来说更好。 – JKillian 2014-09-24 04:31:54