二分查找报错TypeError:'builtin_function_or_method'对象不可下标访问 求助
搞定二分查找里的那个
TypeError 错误! 嘿,我一眼就看出问题出在哪了——你把列表的 index 方法当成可索引的对象来用啦!Python里 aList.index 是个内置方法,得用圆括号 () 调用,但更关键的是,在二分查找的逻辑里你根本不需要这个方法啊!
错误根源
你代码里的这行:
end = aList.index[middle]
用了方括号 [] 去访问 index,这就触发了 TypeError: 'builtin_function_or_method' object is not subscriptable——因为方法不是可索引的对象。而且在二分查找场景中,你应该是想获取列表中索引为 middle 的元素,直接写 aList[middle] 就够了,完全没必要用 index() 方法。
修复后的示例代码
假设你的二分查找是常规的目标值查找场景,修复后的代码大概是这样:
def binary_search(aList, target): start = 0 end = len(aList) - 1 # 初始end设为列表最后一个元素的索引 while start <= end: middle = (start + end) // 2 # 直接通过索引取中间元素,不用index方法 current_element = aList[middle] if current_element == target: return middle # 返回找到的元素索引 elif current_element < target: start = middle + 1 # 目标在右半部分,调整start else: end = middle - 1 # 目标在左半部分,调整end return -1 # 没找到目标值时返回-1
额外提醒
二分查找的核心就是靠索引快速定位元素,index() 方法是遍历列表找元素位置的,用它反而会丢掉二分查找的效率优势,所以以后写二分查找时,直接用索引访问元素就对啦!
内容的提问来源于stack exchange,提问作者anynsfcmschl
相关产品推荐
相关产品推荐

