簡體   English   中英

收益率合並排序函數中的錯誤

[英]Error in Merge Sort function in yield

我從其他人那里收到了一個合並排序功能,這是代碼:

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

我使用的打印語句錯誤嗎?

mergesorted包含yield關鍵字的事實意味着它是一個生成器。 就像錯誤消息所說的那樣,生成器沒有len方法。
生成器沒有len方法的原因是因為生成器實際上並不知道它們將產生什么值,直到是時候產生它們。 不像list s 或tuple s 之類的對象。
在這種情況下,我認為使用yield而不是return沒有任何優勢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM