Lambda函数检查三个字符串中的一个是否在一行中

时间:2017-02-18 01:25:25

标签: python lambda pyspark

所以我没有多少使用lambda函数,我的教授正在推动我们使用它们,所以我有点挣扎。

我在Pyspark工作,我需要检查三个单词中的一个是否排成一行并计算它们出现的次数。这是我目前的尝试:

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

当我这样做时,计数等于不正确的总行数。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

问题与使用lambdas无关。问题是您使用错误的语法来测试多个字符串。你不能在每个字符串之间放置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"]))

答案 1 :(得分: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()