You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python二分查找不同数据规模耗时异常排查:仅返回2097152结果

关于二分查找耗时统计问题的分析与建议

嗨,作为Python新手遇到这种问题太正常啦~首先,缩进错误确实有可能是元凶,但也存在其他可能性,咱们一步步拆解来看:

一、缩进错误的典型场景

如果你的代码里,处理不同数据规模的核心逻辑(比如生成数据集、调用二分查找、计时统计)缩进不对,就会导致只有某一个规模的数据被执行。举个常见的错误例子:

# 错误示例:只有最后一个规模会被处理
import time
import random

def binary_search(arr, target):
    left, right = 0, len(arr)-1
    while left <= right:
        mid = (left + right) // 2
        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    return -1

sizes = [1024, 2048, 2097152]
for size in sizes:
    data = list(range(size))
# 这里缩进错了!下面的计时代码不在循环体内
start_time = time.time()
binary_search(data, random.randint(0, size-1))
end_time = time.time()
print(f"Size {size}: {end_time - start_time}s")

这种情况下,只有最后一个size(也就是2097152)对应的代码会被执行,前面的规模根本没走到计时和打印的步骤。

二、其他可能的原因

除了缩进,还有几种常见情况会导致类似问题:

  • 小规模数据耗时极短:比如1024、2048规模的查找耗时可能只有0.0秒,你可能误以为没输出;
  • 循环逻辑错误:比如你定义的规模列表里只有2097152这一个有效元素,或者循环的终止条件写错了,导致只遍历到这一个规模;
  • 数据生成异常:某些规模的数据生成失败(比如内存不足?不过小规模一般不会),导致后续代码没执行。

三、快速排查建议

  1. 先查缩进:确保生成数据、调用二分查找、计时、打印结果的所有代码,都在for size in sizes:的循环体内部(也就是和data = list(range(size))保持同一缩进层级);
  2. 打印中间标记:在循环内先打印一句print(f"正在处理规模:{size}"),确认所有规模都被遍历到了;
  3. 单独测试小规模:把规模列表改成只有1024,看代码能不能正常输出耗时,排除二分查找本身的问题。

如果能把你的代码片段贴出来,就能更精准定位问题啦~

内容的提问来源于stack exchange,提问作者Muhtasim Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:24:20