来自set的任何项目都匹配任何项目

时间:2015-09-28 16:28:46

标签: python python-3.x

我想定义类似nameFilters的东西,然后从给定字符串列表中检查是否有任何nameFilters符合字符串,所以某些伪代码看起来像:

if any from filters in strings:
    #do the job

其中filter实际上只是我们想要在字符串中找到的子字符串。

当然可以通过艰难的方式完成:

for filter in filters:
    for string in strings:
        if filter in string:
            # do the job

但它不可读并且有很多嵌套。 Python通常是一种语言,你可以用极其可读的方式做事,但我找不到这个问题。

1 个答案:

答案 0 :(得分:2)

看起来你试图通过过滤器列表过滤字符串列表...如果任何过滤器匹配字符串的任何部分,则字符串匹配

 matches = [s for s in strings if any(f in s for f in filters))]

但我不确定那些比你的其他解决方案更可读的只是在一行......

如果你想对它们做些什么你可以把它改成迭代器理解而不是列表理解,那样你只会对它进行一次评估

matches = (s for s in strings if any(f in s for f in filters)))
for m in matches:
    do_something(m)