【问题标题】:Lambda function that checks whether one of three strings are in a line检查三个字符串之一是否在一行中的 Lambda 函数
【发布时间】:2017-02-18 01:25:24
【问题描述】:

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

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

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

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

任何帮助将不胜感激。

【问题讨论】:

  • "x" in ... or "y" in ... or "z" in ...

标签: python lambda pyspark


【解决方案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"]))

【讨论】:

  • 哇,不知道any 函数。感谢您的简洁回复。
【解决方案2】:

问题是"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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-11
    • 2014-06-25
    • 2022-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    相关资源
    最近更新 更多