【问题标题】:Error in Merge Sort function in yield产量中的合并排序功能错误
【发布时间】:2018-07-30 06:47:53
【问题描述】:

我从别人那里收到了一个合并排序函数,代码如下:

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()

我是否使用了 print 语句错误?

【问题讨论】:

标签: python python-3.x


【解决方案1】:

mergesorted 中有 yield 关键字这一事实意味着它是一个生成器。就像错误消息说的那样,生成器没有len 方法。
生成器没有len 方法的原因是,生成器实际上并不知道它们将要生成什么值,直到需要生成它们。与 lists 或 tuples 等对象不同。
在这种情况下,我认为使用yield 代替return 没有任何优势。

【讨论】:

  • 感谢您的解释!
猜你喜欢
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-21
  • 2018-10-13
相关资源
最近更新 更多