我正在寻找通过另一个停止列表过滤一个列表的漂亮pythonic方法,但我想首先匹配第二个列表中的子串。
具体来说:我有list1的URL和list2,如:
['microsoft.com', 'ibm.com', 'cnn', '.ru'] etc
第一个URL列表很大(数千个项目),第二个列表较小,如500-1000。但是使用“in”或sets的简单匹配是不够的,因为第二个列表项应该用作子字符串搜索。 我只能想到两个“for”循环,但它们似乎不是pythonic:)
PS目的是从第一个列表中删除匹配的项目。
答案 0 :(得分:3)
您可以从要匹配的字符串构建单个析取正则表达式,然后使用RE对象的search
方法进行匹配。在将它们粘贴到RE中之前,请确保re.escape
字符串。
>>> import re
>>> substrings = ['microsoft.com', 'ibm.com', 'cnn', '.ru']
>>> pattern = "(?:%s)" % "|".join(map(re.escape, substrings))
>>> print(pattern)
(?:microsoft\.com|ibm\.com|cnn|\.ru)
>>> pattern = re.compile(pattern)
>>> [x for x in ["www.microsoft.com", "example.com", "foo.ru"]
... if not pattern.search(x)]
['example.com']
答案 1 :(得分:0)
这是你所期望的吗?
one=['microsoft.com', 'ibm.com', 'cnn', '.ru']
two=['.com']
filtered=[o for o in one for t in two if o.find(t)!=-1]