2013-01-17 51 views
1

我有含有大量的元組(1500元組是精確的)的元組,如下:有效利用在

l = (("i",), ("i", "am"), ("im",), ("im", "here"), ("go",) ...) 

l的項目是唯一的。

我希望能夠找到在這個列表中的項目如下:

if i in l: 
    do_something_with(i) 

我怎樣才能讓這個查找效率?我應該排序l?會是更有效的搜索這種形式的列表:

l = ("i", "i am", "im", "im here", "go" ...) 
+3

不是它有所作爲,而是在元組中間的'(「im」)'只是一個字符串,它不是'tuple'。 – mgilson

+0

@mgilson良好的捕捉,但是如果他在進行會員測試時實際上有一個由「im」組成的元組,它確實會有所作爲。 – phant0m

+0

@mgilson謝謝,我解決了這個問題:) – Baz

回答

8

查找在列表和元組總是低效的;使用set()代替:

lookupl = set(l) 

測試用於在集合成員資格是恆定的成本(O(1)),而列表和元組成員資格測試有線性成本(O(N))。

+0

l中的項目是獨一無二的,在這種情況下,這套設備是否有所不同? – Baz

+1

@Baz:是的,這是需要時間的查找,而不是它們是否獨特。 –

+0

OP詢問'tuple',而不是'list'(儘管實際上並沒有改變任何內容)。也許你應該說「序列」呢? – mgilson