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

二分查找代码中'int'不可下标访问错误的原因及修复方法

问题:数组交集(元素唯一)的代码错误排查

问题描述

给定两个整数数组a和b,返回它们的交集数组,结果中每个元素必须唯一,返回顺序不限。
示例输入:nums1 = [1,2,2,1],nums2 = [2,2],预期输出:[2]

我的代码

a = [1,2,2,1]
b = [2,2]

if len(a) > len(b):
    my_list = a
    target = b
else:
    my_list = b
    target = a
ans = []
min = 0
max = len(my_list) -1

for i in target: #2
    while min <= max: #min = 0 max = 3
        mid = (min+max)//2 #1
        guess = my_list[mid] # index-1(2 -value)
        if guess == i: #2==2
            ans.append(guess)
            my_list = my_list.pop(my_list[mid])
        if guess < i:
            min = mid+1
        else:
            max = mid-1

运行错误信息

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[95], line 14
     12 while min <= max: #min = 0 max = 3
     13     mid = (min+max)//2 #1
---> 14     guess = my_list[mid] # index-1(2 -value)
     15     if guess == i: #2==2
     16         ans.append(guess)

TypeError: 'int' object is not subscriptable

错误原因

问题出在my_list = my_list.pop(my_list[mid])这行:

  • list.pop()方法传入索引参数时,返回的是该索引对应的元素值,而非修改后的列表。
  • 执行这行后,原本是列表类型的my_list被替换成了pop()返回的整数。
  • 后续循环中再执行guess = my_list[mid],就会试图对整数做下标访问,直接触发类型错误。

修复方案

直接调用my_list.pop()修改原列表即可,无需重新赋值;另外注意pop()的参数应该是索引mid,不是元素值my_list[mid]:

if guess == i: #2==2
    ans.append(guess)
    my_list.pop(mid)  # 直接修改原列表,不用赋值回my_list

内容的提问来源于stack exchange,提问作者Mikhail Rotar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 03:41:11