2012-08-01 65 views
2

我的項目需要足夠的時間,我希望這裏有人能給我一個優雅的寫法。按鍵過濾字符串列表

我有一個字符串列表,並想用一個鍵/鍵一樣的功能(就像我可以做sorted([foo, key=bar))過濾掉重複。

最近,我負責的環節。

目前我要創建一個空的列表,如果值添加

注:name是該文件的名稱的鏈接鏈接太多 - 只是一個正則表達式匹配

parsed_links = ["http://www.host.com/3y979gusval3/name_of_file_1",   
       "http://www.host.com/6oo8wha55crb/name_of_file_2", 
       "http://www.host.com/6gaundjr4cab/name_of_file_3",     
       "http://www.host.com/udzfiap79ld/name_of_file_6", 
       "http://www.host.com/2bibqho4mtox/name_of_file_5", 
       "http://www.host.com/4a31wozeljsp/name_of_file_4"] 

links = [] 
[links.append(link) for link in parsed_links if not name(link) in 
      [name(lnk) for lnk in links]] 

我希望最終列表具有完整的鏈接(所以我不能擺脫除文件名和使用集之外的所有內容);但我希望能夠做到這一點,而不是每次創建一個空列表。

此外,我目前的方法似乎效率低下(這是非常重要的,因爲它經常處理數百個鏈接)。

有什麼建議嗎?

回答

3

爲什麼不直接使用字典?

links = dict((name(link), link) for link in parsed_links) 
0

如果我正確理解你的問題,你的性能問題可能來自列表理解,這個問題會在一個緊密循環中重複評估。

嘗試通過將列表中理解外循環的緩存結果,然後用另一種理解,而不是append()對空列表:

linkNames = [name(lnk) for lnk in links] 
links = [link in parsed_links if not name(link) in linkNames]