2013-08-02 60 views
0

什麼是最好/最快的方式來完成以下內容:我有一個大文件,我需要更新。我不會將它加載到內存中,而是像這樣通過留言讀取它。如何在Python中有效地循環三種不同的數據集合?

with open(self.f, "rb") as f_in: 
     for line in f_in: 
      l = line.strip().split(',') 

對於每一行,可能有兩種不同的更新方案。也就是說,兩個大的列表/元組與更新信息。對於每一行我都要檢查一下,如果我們假設l[0]正在滿足列表1中的條件,如果不檢查列表2中的另一個條件。我想知道什麼是明智的,因爲我可能遇到性能問題。我的第一個想法是從列表/元組中刪除項目,如果它匹配,那麼列表隨着運行時間變得越來越小。

回答

5

要測試一系列值的成員身份,請使用set而不是列表。

與詞典查找一樣,設置成員資格測試是O(1)操作。價格便宜,與集合的大小無關。

set_one = {'some_value', 'some_other_value', ...} 

# ... 
if l[0] in set_one: 
    # do something. 

如果你需要映射值,使用字典:

dict_one = {'some_value': 'item1', 'some_other_value': 'item2', ...} 

# ... 
if l[0] in dict_one: 
    item = dict_one[l[0]] 

這一切都取決於什麼樣的你正在嘗試做查找的;使用正確的數據結構可以使許多不同種類的查找非常高效。循環遍歷文件中的每一行的大列表通常是而不是的最佳選項。

+0

另外,一旦使用了它,你就不必從集合中刪除任何東西 - 只需將它放入便宜。 –

+0

@JasonOrendorff:是的,這就是爲什麼我明確提到查找成本與集合的大小無關。 –

+0

@JasonOrendorff @除非由於某種原因,一旦找到匹配,就不應該再被視爲匹配... –

相關問題