【问题标题】:Ternary operators三元运算符
【发布时间】:2018-09-10 15:47:20
【问题描述】:

我一直在解决编码挑战,并且能够非常简单地完成它们。但是,一旦我尝试将代码压缩为使用三元运算符的样式,问题就出现了。在这个问题中,我试图找到在数组中出现奇数次的整数。我以正常、良好的练习形式这样做,一切都很好。

def find_it(seq):
for x in seq:
    if seq.count(x) % 2 == 1:
        return x

这可行,但是当我尝试将其变成这样的东西时:

def find_it(seq):
for x in seq:
    return x if seq.count(x) % 2 == 1

几乎每次我尝试三元运算符时都会出现此错误:

File "<string>", line 10
return x if seq.count(x) % 2 == 1
                                ^
SyntaxError: invalid syntax

有什么问题?为什么总是说语法无效?

【问题讨论】:

  • 安德烈基本上是在说需要有一个条件,如果为真则做某事,如果为假则做某事。
  • 您的示例中需要else
  • 好的,我输入这个:return x if seq.count(x) % 2 == 1 else None,我仍然遇到问题None should equal 5。我不会认为 else 是问题。
  • 试试:return x if seq.count(x) % 2 == 1 else None。它读作:return (x if seq.count(x) % 2 == 1 else None) 请记住,如果一个函数没有返回任何东西,它默认返回None。如果您使用三元运算符,则必须明确说明。
  • @cryptofanatic09 我认为问题的根源在于您像人而不是计算机一样思考(这通常是值得赞扬的):您似乎混淆了 表达式 和 statementsreturn 只能作为 statement 出现,而​​三元表达式是 expression。当解释器看到return 时,它只需要一个表达式,而三元表达式需要一个else 子句。请参阅docs.python.org/3.6/reference/grammar.html 了解令人痛苦的语法细节。

标签: python ternary-operator


【解决方案1】:

这将是有效的:

def find_it(seq):
    for x in seq:
        return x if seq.count(x) % 2 == 1 else None

但这不是你想要的,不是吗?看来您的原始工作代码是最好的解决方案。

您尝试使用的 return x if CONDITION 语法在 Ruby 中有效,但在 Python 中无效。 Python 中没有像 Ruby 中那样的通用“如果”支持(在大多数其他语言中也不存在)。

【讨论】:

    【解决方案2】:

    Does Python have a ternary conditional operator?

    三元在 python 中有一个“如果条件其他答案的答案”格式。

    如果 x 不在序列中,您似乎没有返回条件,所以可能返回 0??

    return x if seq.count(x) % 2 == 1 else 0
    

    【讨论】:

    • 没有。如果第一个元素出现偶数次,这只会返回 0。在第一次迭代中无条件返回似乎没有任何意义。
    猜你喜欢
    • 2018-09-26
    • 1970-01-01
    • 2021-10-06
    • 2021-08-01
    • 2011-03-16
    相关资源
    最近更新 更多