按键过滤字符串列表

时间:2012-08-01 12:04:14

标签: python list filter

我的项目需要这么多次,我希望这里有人能给我一个优雅的写作方式。

我有一个字符串列表,并希望使用类似键/键的功能过滤掉重复项(就像我可以使用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]]

我希望最终列表具有完整链接(因此我不能只删除除文件名和使用集之外的所有内容);但是我希望每次都能创建一个空列表。

此外,我目前的方法似乎效率低下(这很重要,因为它经常处理数百个链接)。

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

为什么不使用字典?

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

答案 1 :(得分:0)

如果我正确理解了您的问题,那么您的性能问题可能来自于在紧密循环中反复评估的列表理解。

尝试通过将列表推导放在循环之外来缓存结果,然后在空列表中使用另一个解释而不是append()

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