【问题标题】:Chained comparison number range in PythonPython中的链式比较数字范围
【发布时间】:2013-11-12 16:42:17
【问题描述】:

我有以下功能:

def InRange(number):
    return 5 <= number >= 1

如果使用链式比较,如果数字不在 1 到 5 的范围内,我希望这个判断为 false,但似乎无法做到这一点。

有什么建议吗?

【问题讨论】:

    标签: python comparison chained


    【解决方案1】:

    你想要这样:

    def InRange(number):
        return 1 <= number <= 5
    

    请注意,您也可以这样做:

    def InRange(number):
        return 0 < number < 6
    

    【讨论】:

      【解决方案2】:

      使用这个:

      1 <= number <= 5
      

      来自docs

      x &lt; y &lt;= z 等价于x &lt; yy &lt;= z,除了y 是 只评估一次(但在这两种情况下,zx &lt; y被发现是假的)。

      你的(不正确的)表达实际上等同于:

      number >=5 and number >= 1
      

      所以,对于 1 到无穷大之间的任何数字,它将是 True

      【讨论】:

      • 我认为您的意思是,对于从 5 到无穷大的任何数字,它将是 True...
      【解决方案3】:

      您也可以这样做(根据函数的名称,这似乎很合适):

      def InRange(number):
          return number in range(1, 6)
      

      对于较大的数字,您应该使用:

      def InRange(number):
          return number in xrange(1, 10000000)
      

      【讨论】:

      • 但不要将其用于大范围。
      • 但请注意,10**6 in xrange(1, 10000000) 之类的东西大约需要 40 毫秒,而1 &lt;= 10**6 &lt;10000000 只需要 240 ns。所以,我总是更喜欢数学比较运算符。
      • 在 Py3.x 中更多改进的成员资格测试,10**6 in range(1, 10000000) 只采用了 1.41us
      猜你喜欢
      • 2021-11-07
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 2023-03-08
      • 2014-07-23
      相关资源
      最近更新 更多