我从其他人那里收到了一个合并排序功能,这是代码:
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
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句