Determine Whether Integer Is Between Two Other Integers?

前端 未结 11 973
猫巷女王i
猫巷女王i 2020-11-22 15:07

How do I determine whether a given integer is between two other integers (e.g. greater than/equal to 10000 and less than/equal to 30000)?

I\

11条回答
  •  我在风中等你
    2020-11-22 15:38

    There are two ways to compare three integers and check whether b is between a and c:

    if a < b < c:
        pass
    

    and

    if a < b and b < c:
        pass
    

    The first one looks like more readable, but the second one runs faster.

    Let's compare using dis.dis:

    >>> dis.dis('a < b and b < c')
      1           0 LOAD_NAME                0 (a)
                  2 LOAD_NAME                1 (b)
                  4 COMPARE_OP               0 (<)
                  6 JUMP_IF_FALSE_OR_POP    14
                  8 LOAD_NAME                1 (b)
                 10 LOAD_NAME                2 (c)
                 12 COMPARE_OP               0 (<)
            >>   14 RETURN_VALUE
    >>> dis.dis('a < b < c')
      1           0 LOAD_NAME                0 (a)
                  2 LOAD_NAME                1 (b)
                  4 DUP_TOP
                  6 ROT_THREE
                  8 COMPARE_OP               0 (<)
                 10 JUMP_IF_FALSE_OR_POP    18
                 12 LOAD_NAME                2 (c)
                 14 COMPARE_OP               0 (<)
                 16 RETURN_VALUE
            >>   18 ROT_TWO
                 20 POP_TOP
                 22 RETURN_VALUE
    >>>
    

    and using timeit:

    ~$ python3 -m timeit "1 < 2 and 2 < 3"
    10000000 loops, best of 3: 0.0366 usec per loop
    
    ~$ python3 -m timeit "1 < 2 < 3"
    10000000 loops, best of 3: 0.0396 usec per loop
    

    also, you may use range, as suggested before, however it is much more slower.

提交回复
热议问题