python - ```lo == 0, hi == len(cards) - 1``` 和 ```lo, hi = 0, len(cards) - 1``` 有什么区别

我目前正在练习 binary search,但无法理解 lo == 0, hi == len(cards) - 1lo, hi = 0, len(cards) - 1 之间的语法差异。该代码适用于第二种方法,但不适用于第一种方法。任何帮助,将不胜感激。谢谢你。

代码如下:

def binary_search(cards, query):
    # lo == 0, hi == len(cards) - 1
    lo, hi = 0, len(cards) - 1
    while lo <= hi:
        mid = (lo+hi) // 2
        result = locate_card(cards, query, mid)
        mid_card = cards[mid]
        print('lo: ', lo, 'hi: ', hi)
        print('mid: ', mid)
        print('mid_card: ', mid_card)
        print('result: ', result)
        print('\n')
        if result == 'found':
            return mid
        elif result == 'left':
            hi = mid - 1
        else:
            lo = mid + 1
    return -1

def locate_card(cards, query, mid):
    if cards[mid] == query:
        if mid > 0 and cards[mid-1] == query:
            return 'left'
        else:
            return 'found'
    elif cards[mid] < query:
        return 'left'
    else:
        return 'right'
    
    return binary_search(cards, query)

if __name__ == '__main__':
    cards = [13, 11, 10, 7, 4, 3, 1, 0]
    query = 1
    print(binary_search(cards, query))

回答1

双等号 (==) 是比较两个对象以查看它们是否相等的运算符。 lo == 0, hi == len(cards) - 1 会将 lo0 以及 hilen(cards)-1 进行比较。

lo, hi = 0, len(cards) - 1 和写一样

lo = 0
hi = len(cards) - 1

回答2

我建议在 python 解释器中玩耍,以便更好地理解三个符号 =(赋值)、==(相等测试)和 ,(用于构建元组)。

使用 ==,:元组的相等性,或相等的元组

>>> 3 == 3, 4 == 4
(True, True)

>>> 3, 4 == 3, 4
(3, False, 4)

>>> (3, 4) == (3, 4)
True

>>> 3 == 3 and 4 == 4
True

使用 =,:解包赋值

>>> 0, 10
(0, 10)

>>> lo, hi = (0, 1)
>>> print(lo, hi)
0 1

>>> lo, hi = 1, 2
>>> print(lo, hi)
1 2

>>> lo = 3
>>> hi = 4
>>> print(lo, hi)
3 4

赋值元组:这是不正确的语法

>>> lo = 5, hi = 6
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?

:= (python >= 3.8) 的赋值表达式

>>> (lo := 7, hi := 8)
(7, 8)
>>> print(lo, hi)
7 8

回答3

当我们想要使用条件表达式并想要比较两个表达式时使用 == 运算符,如果它们为真,则执行操作,但 = 运算符用于将 value 分配给变量。例如:

if lo == 0 and hi == len(cards) - 1:
    print("Hello")

相似文章

go - Go DNS 问题 TCP 使用 UDP 传输正常

我已经尝试了我能想到的一切,但我正在碰壁。我想知道是否有人能够指出我正确的方向或可能发现问题?我有一个go来编写我自己的DNS服务器有几个原因,主要是学习经验。有几点要提:我正在使用Go使用"gopa...

list - 如何优化以下功能

我在使用以下功能时遇到瓶颈问题。处理lists的list花费的时间太长。我将要详细介绍的list有数百万个lists(最多可以容纳近40M个lists)。该函数遍历lists的list并且对于其第10...

最新文章