二分查找代码中'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
相关产品推荐
相关产品推荐

