使用lambda函数python过滤

时间:2015-10-06 12:38:59

标签: python filter lambda

我有一个包含无效字符串的数组

arr_invalid = ['aks', 'rabbbit', 'dog'].  

我正在使用lambda函数解析RDD并且如果输入字符串中出现任何此无效字符串,则需要忽略大小写 比如输入字符串是akss还是aks都忽略了。

如何在不为每个无效字符串编写过滤器的情况下实现此目的?

1 个答案:

答案 0 :(得分:2)

除非单词排序,否则您需要比较每个字符串,您可以使用any查看每个字符串中是否有任何子字符串:

arr_invalid = ['aks', 'rabbbit', 'dog']

strings = [ "aks", "akss","foo", "saks"]


filt = list(filter(lambda x: not any(s in x.lower() for s in arr_invalid),strings))

输出:

 ['foo']

如果您只想从字符串之一开始排除字符串:

t = tuple(arr_invalid)
filt = list(filter(lambda x: not x.lower().startswith(t), strings))

输出:

['foo', 'saks']

如果输入是单个字符串,则只需拆分:

st = "foo akss saks aks"
t = tuple(arr_invalid)
filt = list(filter(lambda x: not x.startswith(t),st.lower().split()))

您也可以使用列表comp:

 [s for s in st.lower().split() if not s.startswith(t)]

正如poke评论你可以找到与集合的完全匹配,你仍然需要它将它与any和in或str.startswith组合以匹配子串:

arr_invalid = {'aks', 'rabbbit', 'dog'}

st = "foo akss saks aks"
t = tuple(arr_invalid)

file = list(filter(lambda s: s not in st or not s.startswith(t),st.lower().split())