按键过滤字符串列表
问题描述:
我的项目需要足够的时间,我希望这里有人能给我一个优雅的写法。按键过滤字符串列表
我有一个字符串列表,并想用一个键/键一样的功能(就像我可以做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]]
我希望最终列表具有完整的链接(所以我不能摆脱除文件名和使用集之外的所有内容);但我希望能够做到这一点,而不是每次创建一个空列表。
此外,我目前的方法似乎效率低下(这是非常重要的,因为它经常处理数百个链接)。
有什么建议吗?
答
为什么不直接使用字典?
links = dict((name(link), link) for link in parsed_links)
答
如果我正确理解你的问题,你的性能问题可能来自列表理解,这个问题会在一个紧密循环中重复评估。
尝试通过将列表中理解外循环的缓存结果,然后用另一种理解,而不是append()
对空列表:
linkNames = [name(lnk) for lnk in links]
links = [link in parsed_links if not name(link) in linkNames]