【问题标题】:Python - One line if-elif-else statementPython - 一行 if-elif-else 语句
【发布时间】:2014-01-02 17:48:53
【问题描述】:

我正在尝试将 if-elif-else 语句压缩为一行。我试过了:

a == 1 ? print "one" : a == 2 ? print "two" : print "none"

但是我遇到了语法错误。我也试过:

print "one" if a == 1 else print "two" if a == 2 else print "none"

但我也遇到了语法错误。

我可以做些什么来改善这些答案或创建一个有效的答案?

【问题讨论】:

  • 问题:你为什么要这样做?是为了创造单线,还是你觉得你会从中得到更多的清晰?
  • @Makoto 我想这样做是因为我不想写 6 行代码。一长行代码会更好。
  • 不要混淆清晰和简洁——通常较短的代码更易读,但如果你诚实地告诉我,你在这里尝试的代码行比较长的代码行更清晰,那么你有一个非常不同的明确的定义。
  • 另外值得注意的是,Python 中没有“单行 if-elif-else”语句。还有ternary operator,它使用相同的关键字和相似的语法,但是是一个根本不同的操作,有限制(主要是它只支持表达式)。
  • @Makoto 这与我正在尝试做的事情无关。这个问题需要一个 if-else 语句,但我想要一个 if-else-elif 语句。

标签: python if-statement


【解决方案1】:

试试:

print {1: 'one', 2: 'two'}.get(a, 'none')

【讨论】:

  • 非常感谢!我不知道在这种情况下可以使用字典!
【解决方案2】:

Python 中的“三元”运算符是一种形式的表达式

X if Y else Z

其中XZ 是值,Y 是布尔表达式。 请尝试以下操作:

print "one" if a==1 else "two" if a==2 else "none"

这里,表达式"two" if a==2 else "none"的值是a==1为false时第一个返回的值。 (它被解析为"one" if a == 1 else ( "two" if a==2 else "none")。)它返回"one""two""none" 之一,然后作为print 语句的唯一参数传递。

【讨论】:

  • @avaragecoder,您的代码被“打印”语句污染了,这不起作用。这按预期工作。
  • @xbello 哦。在 Ruby 中也是一样的,我猜我的大部分代码都与 Ruby 相关......,它是一样的。谢谢你的信息!
  • 请注意,我声明 XZ,而不是语句
  • 请注意,这是单行的一个坏方面。你得到一个“语法错误”并且不知道它来自哪里。归咎于“X if Y else Z”,但你的错误在别处。
【解决方案3】:

使用嵌套条件表达式(三元运算符):

>>> a = 2
>>> print 'one' if a == 1 else 'two' if a == 2 else 'none'
two

【讨论】:

    【解决方案4】:

    我会使用 dict 而不是嵌套的 if

    options = {1: "one", 2: "two"}
    print options.get(a, 'none')
    

    【讨论】:

    • 'none'的选项在哪里?
    • 这里是:p,get的第二个参数如果没有找到key可以放默认值
    【解决方案5】:

    使用元组索引和条件:

    print ('one', 'two', 'none')[0 if a==1 else 1 if a==2 else 2]
    

    或者,如果 a 与索引的关系可以是表达式:

    print ('one', 'two', 'none')[a-1 if a in (1,2) else -1]
    

    您还可以将元组索引方法与 dict 结合以生成索引,以获得比直接 dict 方法(恕我直言)更具可读性的内容:

    print ('one', 'two', 'none')[{1:0,2:1}.get(a, -1)]
    

    【讨论】:

    • +1;这是一种不可怕的方式来做我永远不想做的事情。
    【解决方案6】:
    print "one" if a == 1 else "two" if a == 2 else "none"
    

    【讨论】:

      【解决方案7】:
      print "one" if a == 1 else("two" if a ==2 else "None")
      

      【讨论】: