收益率合并排序函数中的错误

我从其他人那里收到了一个合并排序功能,这是代码:

def mergesort(lst):
    l = len(lst)
    if l <= 1:
        return lst
    return mergesorted(mergesort(lst[:l//2]), mergesort(lst[l//2:]))

def mergesorted(a, b):
    i, j = 0, 0
    la, lb = len(a), len(b)
    while i < la or j < lb:
        if i == la or (j != lb and a[i] > b[j]):
            yield b[j]
            j += 1
        else:
            yield a[i]
            i += 1

我仍在尝试了解 yield 的工作原理,因此当我尝试打印结果以测试函数时,我使用了

m = mergesort([4, 2, 5, 1, 6, 3])

for i in m :
    print(i)

它给了我这个错误:

Traceback (most recent call last):
    for i in m :
    la, lb = len(a), len(b)
TypeError: object of type 'generator' has no len()

我使用的打印语句错误吗?

蝙蝠侠

该事实mergesortedyield它的关键字意味着它是一台发电机。正如错误消息所说,生成器没有len方法。
生成器没有len方法的原因是因为生成器实际上并不知道它们将生成什么值,直到是时候生成它们为止。不像lists 或tuples这样对象
在这种情况下,我认为使用yield代替return.

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

R中的收益率曲线排序

来自分类Dev

IEnumerator收益率返回类型错误

来自分类Dev

IEnumerator收益率返回类型错误

来自分类Dev

在此示例中,为什么“收益率”和“收益率收益率”具有相同的行为?

来自分类Dev

在此示例中,为什么“收益率”和“收益率收益率”具有相同的行为?

来自分类Dev

不从构造函数调用收益率返回的方法?

来自分类Dev

函数fzero,matlab,内部收益率,复数根

来自分类Dev

Python中的简单合并排序错误

来自分类Dev

无法找出合并排序中的错误

来自分类Dev

Python中的简单合并排序错误

来自分类Dev

收益率无效,但收益率有效

来自分类Dev

ES6收益率(收益率1)(收益率2)(收益率3)()

来自分类Dev

收益率IEnumerable <IEnumerable <... >>

来自分类Dev

收益率-内存优化

来自分类Dev

Ruby Blocks(收益率)

来自分类Dev

Laravel中的刀片引擎-收益率不起作用

来自分类Dev

等效于delphi中C#的收益率

来自分类Dev

合并排序算法错误

来自分类Dev

错误合并排序输出

来自分类Dev

合并排序-细分错误

来自分类Dev

合并排序错误 + 警告

来自分类Dev

合并排序中具有cout的分段错误

来自分类Dev

Haskell合并排序中的编译错误

来自分类Dev

此合并排序实现中的错误是什么?

来自分类Dev

拆分反转的合并排序实现中的错误在哪里

来自分类Dev

合并排序程序中的 Ocaml 类型错误

来自分类Dev

Scala的未来内部收益率

来自分类Dev

更紧凑的“收益率回报”方法?

来自分类Dev

使用收益率而不返回类型