2012-08-01 103 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]