2015-10-06 102 views
1

我有包含數組無效的字符串過濾器使用lambda函數蟒

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

我通過RDD解析使用lambda功能和需要的,如果任何這種無效的字符串的來自輸入字符串 像忽略的情況下如果輸入字符串是akssaks都忽略。

如何在不爲每個無效字符串編寫過濾器的情況下實現這一目標?

回答

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

您也可以只使用一個列表比較:

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

至於捅評論,你可以找到確切的火柴一套,你仍然需要它與任何和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()) 
+1

使'arr_invalid'成爲獎勵積分的一個集合:) – poke

+0

@poke,true,如果我們得到完全匹配,它會匹配完整的單詞以避免O(n)搜索。 –