python - 谁能向我解释以下代码有什么问题
问题描述
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二进制搜索算法,并认为这可以正常工作。我不知道为什么这不起作用,并希望获得专家意见
解决方案
您收到此错误的原因是您的 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()
,给出您看到的错误。
推荐阅读
- haskell - 在 Haskell 的列表中查找最短的列表
- excel - 从用户输入设置打印区域的宏
- java - Java中的数学矩阵
- ruby-on-rails - 在反复复制 Rails 安装后运行它有什么问题吗?
- android - how to implement playing programme in Android IPTV like Perfect player
- javascript - 二
用 ng 重复 - python - Pandas 数据框转换
- excel - 具有多个用户的环境功能
- python - 如何对子矩阵求和
- c# - 什么是 PromptOptions.Validations