python列表search_在Python列表中进行二进制搜索

好吧,你的代码中有一些小错误.要找到它们,您应该使用调试器,或者至少添加跟踪以了解发生的情况.这是您的原始代码,其中包含使问题显而易见的痕迹:

def search(list, target):

min = 0

max = len(list)-1

avg = (min+max)/2

print list, target, avg

...

你可以立即看到:

>你搜索一个子阵列,当你低于平均值时跳过avg-1

>当您在子数组中搜索时,您将获得该子数组中的索引

修复现在是微不足道的:

elif (list[avg] < target):

return avg + 1 + search(list[avg+1:], target) # add the offset

else:

return search(list[:avg], target) # sublist ends below the upper limit

这不是全部,当你以min == max结束循环时,你不返回任何东西(意味着你返回None).最后但并非最不重要的是,永远不要使用标准Python库中的名称来表示您自己的变量.

所以这是固定代码:

def search(lst, target):

min = 0

max = len(lst)-1

avg = (min+max)/2

# uncomment next line for traces

# print lst, target, avg

while (min < max):

if (lst[avg] == target):

return avg

elif (lst[avg] < target):

return avg + 1 + search(lst[avg+1:], target)

else:

return search(lst[:avg], target)

# avg may be a partial offset so no need to print it here

# print "The location of the number in the array is", avg

return avg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值