【问题标题】:Simplify Chained Comparison简化链式比较
【发布时间】:2014-12-17 15:02:40
【问题描述】:

我有一个整数值x,我需要检查它是否介于startend 值之间,所以我写了以下语句:

if x >= start and x <= end:
    # do stuff

这句话有下划线,工具提示告诉我必须

简化链式比较

据我所知,这种比较非常简单。我在这里错过了什么?

【问题讨论】:

  • 如果您从工具提示中获得建议,您可以将鼠标悬停在该区域上,它会给您一个小灯泡。您可以单击它并让它自动插入它建议的更改。所以你可以看到它认为你应该做什么(如果你不喜欢,你可以撤消它)。

标签: python pycharm


【解决方案1】:

在 Python 中,您可以使用"chain" comparison operations,这意味着它们是“和”在一起的。在你的情况下,它会是这样的:

if start <= x <= end:

参考:https://docs.python.org/3/reference/expressions.html#comparisons

【讨论】:

  • 谢谢,我不知道你可以在 Python 中做到这一点。这个真的让我摸不着头脑。
  • 伙计,事情应该是这样的。但是来自其他语言的你会忘记你的理想,甚至不认为事情可能是他们应该的样子。但这就是为什么 python 如此神奇,正是因为这样的事情:)
  • 你知道任何推荐链式风格的“官方”来源吗?哪个更“惯用” Python?
  • 我不知道,有时我希望 python 抛出更多的护栏。当 x、y、z 是 Pandas 系列时,x == y == z 失败并出现 ValueError
  • @BallpointBen:很多事情都不像你在 Pandas 中所期望的那样工作,甚至 x == y and y == z
【解决方案2】:

可以改写为:

start <= x <= end:

或者:

r = range(start, end + 1) # (!) if integers
if x in r:
    ....

【讨论】:

  • 范围是一个糟糕的选择,因为对于较大的开始和结束,您正在创建一个不必要的列表。
  • @BurhanKhalid 确实,但我想对于 OP 来说值得一提。
  • 在python3中,范围很好地处理了“contains”,所以不会生成列表。
  • @MarounMaroun 从 python 3 开始,range 函数的行为就像以前的 xrange,也值得一提
猜你喜欢
  • 2017-11-23
  • 2017-03-21
  • 2014-03-31
  • 2014-05-17
  • 1970-01-01
  • 1970-01-01
  • 2019-08-23
相关资源
最近更新 更多