python - “NoneType”类型的对象在合并排序中没有 len()
问题描述
我在 python 中实现了一个常用的合并排序算法,但出现了意外的类型错误。
from typing import List
def merge(arr1: List[int], arr2: List[int]) -> List[int]:
sorted_arr = []
i, j = 0, 0
while i < len(arr1) and j < len(arr2):
if arr1[i] < arr2[j]:
sorted_arr.append(arr1[i])
i = i + 1
else:
sorted_arr.append(arr2[j])
j = j + 1
sorted_arr += arr1[i:]
sorted_arr += arr2[j:]
def merge_sort(arr: List[int]):
if len(arr) == 1:
return arr
mid = len(arr) // 2
left_arr = merge_sort(arr[:mid])
right_arr = merge_sort(arr[mid:])
return merge(left_arr, right_arr)
错误是这样说的:
while i < len(arr1) and j < len(arr2):
TypeError: object of type 'NoneType' has no len()
我不知道为什么while
循环中会发生类型错误。谁能帮我解决这个问题?谢谢。
解决方案
问题是您没有从该merge()
方法显式返回任何内容,并且默认情况下,None
如果没有显式返回任何内容,它就会返回。
sorted_arr
将方法末尾的返回merge()
为:
def merge(arr1: List[int], arr2: List[int]) -> List[int]:
sorted_arr = []
i, j = 0, 0
while i < len(arr1) and j < len(arr2):
if arr1[i] < arr2[j]:
sorted_arr.append(arr1[i])
i = i + 1
else:
sorted_arr.append(arr2[j])
j = j + 1
sorted_arr += arr1[i:]
sorted_arr += arr2[j:]
return sorted_arr # return the sorted_arr
推荐阅读
- python - 来自请求的 GraphQL JSON 错误 - Kickstarter
- android - 背景图像不适合并为按钮添加阴影
- r - 当使用 R 不存在一个数据帧时,我可以使用什么代替 cbind() 来绑定两个数据帧?
- oracle - 安装 cx_Oracle 失败
- php - 需要我们从 Alexa Skill 收到的带有访问令牌的 Google 电子邮件地址吗?
- go - 超时等待Golang中的进程而不杀死它?
- reactjs - 数组中的 Firebase 不支持的字段值错误
- php - 运行两个 mySql 查询以获取数据
- laravel - 基本 URL 是非 www 导致路由非 www
- python - 具有 Selenoid 设置所需功能的机器人框架