2017-02-18 54 views
0

所以我沒有使用lambda函數,我的教授們正在推動我們使用它們,所以我掙扎了一下。檢查三個字符串之一是否在一行中的Lambda函數

我在Pyspark工作,我需要檢查三個單詞中的一個是否在一行,並計算它們出現的次數。這是我目前的嘗試:

lines = sc.textFile("File")  
counts = lines.filter(lambda line: "x" or "y" or "z" in line.lower()) 
counts.count() 

當我這樣做時,計數等於行總數不正確。

任何幫助將不勝感激。

+1

'的 「X」 ......或 「Y」 在......或 「Z」 ...' – Barmar

回答

1

問題無關使用lambda表達式。問題是你使用錯誤的語法來測試多個字符串。您不能在每個字符串之間放置or,您需要在比較之間做到這一點。

counts = lines.filter(lambda line: "x" in line.lower() or "y" in line.lower() or "z" in line.lower()) 

爲了簡化它,你可以使用any

counts = lines.filter(lambda line: any(x in line.lower() for x in ["x", "y", "z"])) 
+0

哇,有不知道「任何」功能。感謝您的簡潔迴應。 – madsthaks

0

問題是"x" or "y" or "z" in line.lower()始終是True。任何非空字符串在Python中都是'Trueish',並且布爾表達式True or ...始終爲True,無論如何遵循True

更好的辦法:使用Python的any

lines = sc.textFile("File")  
counts = lines.filter(lambda line: any(c in line.lower() for c in ["x", "y", "z"])) 
counts.count() 
相關問題