2014-10-09 83 views
0

我有一個列表或數組(python中正確的術語是什麼?)對象。 讓所有對象符合條件的最有效方法是什麼?在對象列表中查找objetcs的最有效方法

我可以迭代列表並檢查每個元素,但看起來效率不高。

objects = [] 
for object in list: 
    if object.value == "123": 
    objects.add(object) 
+1

「高效」是一個模糊的術語。你的意思是「最快的方式」還是「最簡單的方式」? – georg 2014-10-09 12:28:51

+0

我的意思是最快的方式 – 2014-10-09 12:31:25

+0

然後提供更多細節(見下文)。 – georg 2014-10-09 12:32:38

回答

2

您可以使用filter

objects = filter(lambda i: i.value == '123', l) 

自我提醒
顯然,"filter vs list comp"辯論開始火焰戰爭。

+0

這是「最有效的方式」? – vaultah 2014-10-09 12:26:14

+0

如果你知道一個更有效的方式可以發佈你自己的答案,那麼它是單行,Pythonic和'O(N)';) – CoryKramer 2014-10-09 12:27:24

+0

Python中最有效的方式是在本地搜索列表,但對於99.9999999%的可能用例,這不是一個嚴肅的選擇。對於這些99.99%的過濾器是絕對正確的。 +1 – dom0 2014-10-09 12:29:35

6

這是最簡單的方法:

objects = [x for x in someList if x.value == 123] 

如果你正在尋找一個更快解決方案,你有更多的告訴我們你的對象和源列表是如何構建的。例如,如果所討論的屬性在對象中是唯一的,則可以使用dict而不是list來獲得更好的性能。另一種選擇是保持列表排序並使用bisect而不是線性搜索。但是請注意,當列表變得非常大時,如果您的元素少於500個,那麼這些優化工作就會開始有意義,只需使用理解並且不用擔心。

+0

Pythonic,Python 2/Python 3兼容,高效,沒有lambda表達式。 +1 – vaultah 2014-10-09 12:31:41

+0

這比'filter()'更簡單,Pythonic更快,速度更快。 – mhawke 2014-10-09 12:39:20

相關問題