首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误:“”NoneType“”类型的对象在递归实现合并排序时没有len()

错误:“”NoneType“”类型的对象在递归实现合并排序时没有len()
EN

Stack Overflow用户
提问于 2019-08-22 01:42:26
回答 2查看 195关注 0票数 0

我正在尝试使用python 3.7实现合并排序。为此,我编写了一个merge()函数和一个递归sort()函数。在这里,sort()函数分解一个列表,直到它有一个元素。但问题是解释器无法将merge函数的参数m和n识别为列表,因此显示以下错误:

代码语言:javascript
复制
def merge(m, n):
    x = y = 0
    v = []
    while x < len(m) and y < len(n):
        if m[x] < n[y]:
            v.append(m[x])
            x = x + 1
        elif m[x] > n[y]:
            v.append(n[y])
            y = y + 1
        else:
            v.append(m[x])
            x, y = x + 1, y + 1
    while x < len(m):
        v.append(m[x])
        x = x + 1
    while y < len(n):
        v.append(n[y])
        y = y + 1
    return v

def sort(a):
    if len(a) == 1:
        return a
    else:
        merge(sort(a[:len(a) // 2]), sort(a[len(a) // 2:]))

x = list(range(10, 0, -1))
sort(x)
print(x)

预期结果id已排序列表。

但是python显示了这个错误:

回溯(最近一次调用):文件"",第1行,排序(X)文件"",第5行,排序合并( sort (a:len(A) // 2),sort(alen(a) // 2:))文件"",第5行,排序合并( sort (a:len(A) // 2),排序(alen(A) // 2:)文件"",第5行,在sort merge(sort(a:len(a) // 2)中,sort(alen(a) // 2:)文件"",第4行,在merge中,而x< len(m)和y< len(n):TypeError:类型为'NoneType‘的对象没有len()

EN

Stack Overflow用户

发布于 2019-08-22 15:14:16

注释中记录的修复。作为另一种选择,可以一次性分配工作数组,合并排序将只使用索引,而不是创建数组的多个副本。

代码语言:javascript
复制
def merge(m, n):
    x = y = 0
    v = []
    while x < len(m) and y < len(n):
        if m[x] <= n[y]:                # fix
            v.append(m[x])
            x = x + 1
        else:
            v.append(n[y])
            y = y + 1
    while x < len(m):
        v.append(m[x])
        x = x + 1
    while y < len(n):
        v.append(n[y])
        y = y + 1
    return(v)

def sort(a):
    if len(a) == 1:
        return(a)
    else:
        return(merge(sort(a[:(len(a)//2)]), sort(a[len(a)//2:])))

# test sort
x = list(range(10, 0, -1))
x = sort(x)                             # fix
print(x)
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57596748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档