Python如何按分组反转数组?报NoneType对象不可迭代错误如何解决?
问题原因
- 错误触发场景为输入参数
k=1时,reverseSubarray函数的边界判断分支仅执行return没有返回值,Python中无返回值的函数默认返回None - 你将该返回值重新赋值给了
arr变量,导致后续执行for i in arr遍历时,尝试迭代None对象,抛出对应类型错误
修复方案
修改reverseSubarray函数中k==1的分支逻辑,返回原数组即可,同时可优化交换变量的写法简化代码:
def reverseSubarray(arr,n,k): if k == 1: return arr i = 0 while i < n: l = i r = min(i+k-1, n-1) # 替换原临时变量交换写法,使用Python原生元组解包交换更简洁 while l < r: arr[l], arr[r] = arr[r], arr[l] l += 1 r -= 1 i += k return arr
补充说明
Python中列表属于可变对象,函数内对列表的修改会直接作用于原列表,你也可以选择不接收返回值,直接调用reverseSubarray(arr,n,k)而不赋值给arr,也能避免该错误,但为了函数返回逻辑的一致性,更推荐修正分支的返回值。
内容的提问来源于stack exchange,提问作者Puneet Sharma
相关产品推荐
相关产品推荐

