[英]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.