在下面的代碼中,我創建了一個包含三個對象的列表,並使用變量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