【问题标题】:Python filter/remove URLs from a listPython 从列表中过滤/删除 URL
【发布时间】:2010-09-20 11:29:57
【问题描述】:
【问题讨论】:
标签:
python
url
list
filter
【解决方案1】:
这是 Graeme 的另一种替代方法,使用更新的列表解析语法:
list2= [line for line in file if 'CONTENT_ITEM_ID' in line]
你更喜欢哪一种,看个人喜好了!
【解决方案2】:
我喜欢@bobince 的回答 (+1),但会加大赌注。
由于您有一个相当大的起始集,您可能希望避免将整个列表加载到内存中。除非您需要整个列表来做其他事情,否则您可以使用Python generator expression 来执行相同的任务,方法是根据请求逐项构建过滤后的列表:
for filtered_url in (line for line in file if 'CONTENT_ITEM_ID' in line):
do_something_with_filtered_url(filtered_url)
【解决方案3】:
list2 = filter( lambda x: x.find( 'CONTENT_ITEM_ID ') != -1, list1 )
过滤器在 list1 的每个元素(第二个参数)上调用函数(第一个参数)。如果函数返回 true(非零),则将元素复制到输出列表中。
lambda 基本上创建了一个临时的未命名函数。这只是为了避免必须创建一个函数然后传递它,如下所示:
function look_for_content_item_id( elem ):
if elem.find( 'CONTENT_ITEM_ID') == -1:
return 0
return 1
list2 = filter( look_for_content_item_id, list1 )
【解决方案4】:
为了完整性;您也可以使用ifilter。它类似于过滤器,但不建立列表。
from itertools import ifilter
for line in ifilter(lambda line: 'CONTENT_ITEM_ID' in line, urls):
do_something(line)