【问题标题】:Python if-else short-hand [duplicate]Python if-else简写[重复]
【发布时间】:2013-01-05 21:08:43
【问题描述】:

可能重复:
Ternary conditional operator in Python

我想在 python 中做以下事情:

while( i < someW && j < someX){
   int x = A[i] > B[j]? A[i++]:B[j++];
   ....
}

显然,当ij 达到限制时,代码将跳出循环。我需要循环外的ij 的值。

我真的必须这样做

x=0
...
if A[i] > B[j]:
  x = A[i]
  i+=1
else:
  x = B[j]
  j+=1

或者有人知道更短的方法吗?

除了上述之外,我能否让 Python 支持类似于

a,b=5,7
x = a > b ? 10 : 11

【问题讨论】:

  • @MartijnPieters:第二部分肯定是重复的,但我不确定第一部分。
  • @DSM:好吧,一旦 OP 发现了更多的 Python 结构和循环,第一部分就不再需要了。你打算尝试编写迭代器的完整介绍吗?
  • @DSM:我也没有看到有人在下面解决这部分问题。 ;-)
  • @Martijn Pieters ,虽然我感谢所有参与,但您的评论相当便宜。如果您对第一部分有答案,请将其发布。嘲讽不是推理。
  • @user1612593:对不起,我不是要嘲笑你。适应一门新语言和习语需要时间。这里的上下文太少,无法给出简洁而有意义的答案;在惯用的 Python 中,您通常不会遇到像您这样的情况。

标签: python python-2.7


【解决方案1】:

最易读的方式是

x = 10 if a > b else 11

但您也可以使用andor

x = a > b and 10 or 11

不过,“Python 之禅”说“可读性很重要”,所以请选择第一种方式。

此外,如果您放置一个变量而不是 10 并且它的计算结果为 False,则与或技巧将失败。

但是,如果不止一个赋值依赖于这个条件,那么按照你的方式编写它会更具可读性:

if A[i] > B[j]:
  x = A[i]
  i += 1
else:
  x = A[j]
  j += 1

除非您将 ij 放入容器中。但如果你告诉我们你为什么需要它,很可能你不需要它。

【讨论】:

  • 谢谢。这适用于我问题的第二部分。投票!
  • 我已经编辑表明我需要 ji 在 while 循环之外。
  • x = a &gt; b and 10 or 11 在一组特定的问题中也能正常工作,因为任何计算结果为 false 而不是 10 的东西都会使其失败,例如字符串。
  • [i&lt;2 and i or i-4 for i in range(4)] 返回:[-4, 1, -2, -1]。它拖了我两天,我不得不和我的教授逐行阅读代码,以找出为什么我们的算法不起作用。谢谢。
  • 这在内部是如何工作的:x = a > b and 10 or 11
【解决方案2】:

试试这个:

x = a > b and 10 or 11

这是一个执行示例:

>>> a,b=5,7
>>> x = a > b and 10 or 11
>>> print x
11

【讨论】:

  • 10 if a &gt; b else 11。无需求助于布尔运算符。
  • @MartijnPieters:说得好,先生。 :)
  • 谢谢。这适用于我问题的第二部分。投票!
  • 这在内部是如何工作的:x = a > b and 10 or 11
猜你喜欢
  • 2017-01-14
  • 2019-01-03
  • 2014-09-22
  • 2014-11-04
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
  • 2013-08-18
  • 2011-06-02
相关资源
最近更新 更多