【发布时间】:2019-12-22 10:23:09
【问题描述】:
为什么我的 yield 关键字没有产生预期的输出?
我正在使用递归算法(合并排序)并使用yield,以便每次更改(排序)列表时都可以遍历列表。
def MergeSort(lst):
if len(lst) > 1:
middle = len(lst)//2
lefthalf = lst[:middle]
righthalf = lst[middle:]
MergeSort(lefthalf)
MergeSort(righthalf)
i,j,k= 0,0,0
while i<len(lefthalf) and j<len(righthalf):
if lefthalf[i] < righthalf[j]:
lst[k] = lefthalf[i]
i+=1
else:
lst[k] = righthalf[j]
j+=1
k+=1
while i<len(lefthalf):
lst[k]=lefthalf[i]
i+=1
k+=1
while j<len(righthalf):
lst[k]=righthalf[j]
j+=1
k+=1
yield lst
a = MergeSort([2,3,566,78,8])
for i in a:
print(i)
[2, 3, 566, 78, 8]
相反,我希望实现以下目标:(随着算法的工作)
[2, 3, 566, 78, 8]
[2, 3, 566, 8, 78]
[2, 3, 8, 78, 566]
如果我使用return 语句,它将按预期工作并对列表进行排序,但是当我使用yield 时,我无法获得合适的生成器。我还尝试将yield 放在while 语句和其他任何地方。我怎样才能解决这个问题?我错过了什么?
【问题讨论】:
-
每次调用
MergeSort,它只知道它当前正在排序的列表部分,因此它无法为您提供完整列表的“视图”。 -
你为什么使用
yield这个? -
我想使用生成器
yield输出创建动画条形图。
标签: python algorithm generator mergesort yield