【发布时间】: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 语句错误?
【问题讨论】:
-
不!生成器没有 len()。它们的功能类似于光标。要获得 len,就意味着遍历它并耗尽光标。
-
查看这个问题,因为有几种方法可以获得生成器长度:stackoverflow.com/questions/7460836/how-to-lengenerator
-
这只是破代码
标签: python python-3.x