使用lambda函数python进行过滤

2024-06-28 20:07:56 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我正在使用lambda函数通过RDD进行解析,如果输入字符串中有任何无效字符串,则需要忽略大小写 就像输入字符串是akssaks忽略两者。在

如何在不为每个无效字符串编写筛选器的情况下实现这一点?在


Tags: lambda函数字符串情况数组aksrddarr
1条回答
网友
1楼 · 发布于 2024-06-28 20:07:56

您需要比较每个字符串,除非单词经过排序,否则可以使用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))

输出:

^{pr2}$

如果只想排除以子字符串之一开头的字符串:

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)]

正如poke所说,你可以找到与集合完全匹配的内容,你仍然需要它来将它与or中的any和结合起来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())

相关问题 更多 >