首页 > 解决方案 > 谁能向我解释以下代码有什么问题

问题描述

def search(num_list, find):
    while True:
        if not num_list:
            return "Not in list"
        else:
            i = int(len(num_list) // 2)
            if int(num_list[i]) == find:
                return i
            elif int(num_list[i]) > find:
                num_list = (lambda x: x < num_list[i], num_list)
            elif int(num_list[i]) < find:
                num_list = (lambda x: x > num_list[i], num_list)


checkList = [2, 5, 8, 18, 22, 35, 45, 72]
element = int(input("Enter number to be found: "))
print(search(checkList, element))

当我尝试使用任何数字运行它时,会出现以下错误消息:

Traceback (most recent call last):
  File "/home/rahul/PycharmProjects/binSearch/main.py", line 17, in <module>
    print(search(checkList, element))
  File "/home/rahul/PycharmProjects/binSearch/main.py", line 7, in search
    if int(num_list[i]) == find:
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

所以我正在尝试为类制作一个python二进制搜索算法,并认为这可以正常工作。我不知道为什么这不起作用,并希望获得专家意见

标签: python

解决方案


您收到此错误的原因是您的 lambda 函数位于函数和列表的元组中。所以只看那部分:

num_list = [2, 5, 8, 18, 22, 35, 45, 72]
i = 5
num_list = (lambda x: x < num_list[i], num_list)

print(num_list)

结果:

(<function <lambda> at 0x107a170e0>, [2, 5, 8, 18, 22, 35, 45, 72])

这是 lambda 函数的内存地址和一个列表,您最终将其传递给int(),给出您看到的错误。


推荐阅读