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]]

我希望最终列表具有完整的链接(所以我不能只删除文件名和使用集之外的所有内容);但我希望能够做到这一点,而无需每次都创建一个空列表。

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

有什么建议么?

4

2 回答 2

3

为什么不直接使用字典?

links = dict((name(link), link) for link in parsed_links)
于 2012-08-01T12:10:32.967 回答
0

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

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

linkNames = [name(lnk) for lnk in links]
links = [link in parsed_links if not name(link) in linkNames]
于 2012-08-01T12:08:48.113 回答