繁体   English   中英

使用Lambda函数python进行过滤

[英]Filter using lambda function python

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

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

我正在使用lambda函数通过RDD进行解析,并且需要忽略此无效字符串是否出现在输入字符串中的情况,例如输入字符串是akss还是aks忽略这两种情况。

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

您需要比较每个字符串,除非对单词进行排序,可以使用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()))

您也可以只使用列表组合:

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

正如戳所评论的那样,您可以找到与集合完全匹配的内容,但仍需要将其与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())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM