我试图通过一组匹配器和一组字符串进行排序,如果我有
matchers = ['foo', 'bar', 'abc']
和
strings = ['afooa', 'zbarz', 'abcabc', 'purple', 'foobar']
我希望能够获得strings
的任何元素,其中matchers
的任何元素都是子字符串,这样
results = ['afooa', 'zbarz', 'abcabc', 'foobar']
,理想情况下不仅仅依靠嵌套的for循环。
我已经浏览了一段时间,但这是一个难以理解的问题,所以即使任何人对搜索方面的任何建议都会非常感激。
答案 0 :(得分:6)
results = [s for s in strings if any(m in s for m in matchers)]
说明:我们遍历strings
并添加元素,如果matchers
中的任何元素都包含strings
元素。
答案 1 :(得分:3)
如果您不想编码循环,可以使用regular expression(RegEx):
>>> import re
>>> regex = re.compile('|'.join(matchers))
这会创建一个与RegEx foo|bar|abc
匹配的任何内容。
我们可以使用正则表达式的search
方法和filter
:
>>> list(filter(pattern.search, strings))
['afooa', 'zbarz', 'abcabc', 'foobar']
如果没有匹配, search
会返回MatchObject
或None
。所以我们过滤掉匹配某些内容的字符串(并不重要匹配的内容。)
如果我们使用match
,它将从字符串的开头匹配:
>>> list(filter(pattern.match, strings))
['abcabc', 'foobar']