有没有比这更有效的方法...我只是为一堆URL创建一个阻止列表
url = 'http://www.google.com'
blocks = ['youtube.com','google.com','bing.com']
for block in blocks:
if block in url:
return 0
return 1
答案 0 :(得分:2)
url = 'http://www.google.com'
blocks = ['youtube.com','google.com','bing.com']
return filter(lambda b: b in url, blocks)
答案 1 :(得分:0)
根据PEP
,列表理解更为可取。
>>> print [block in url for block in blocks]
[False, True, False]
或者如果您更喜欢int:
>>> print [int(block in url) for block in blocks]
[0, 1, 0]
答案 2 :(得分:0)
如果您要一遍又一遍地执行此操作,它可能会为您预先编译包含所有块的正则表达式提供适度的性能提升。例如:
import re
blocks = ["youtube.com", "google.com", "bing.com"]
precomp_regex = re.compile("|".join(map(re.escape, blocks)))
def string_contains_block(string, regex=precomp_regex):
return regex.search(string)
如果您的一组块非常大,或者经常更改,则可能值得存储为基数。 (把OR的正则表达式想象成一个基本特里的非常天真的实现)。
答案 3 :(得分:-1)
url = 'http://www.google.com'
blocks = ['youtube.com','google.com','bing.com']
return not(any([block in url for block in blocks]))