【发布时间】:2015-02-22 02:24:48
【问题描述】:
我正在尝试使用 python 生成器来实现一种合并排序,以在生成的数字中找到最小的数字并生成下一个,这是我的示例代码:
class GeneratorSort():
def __init__(self, *args):
self.values = [(arg.next(), i) for i, arg in enumerate(args)]
self.generators = args
def generate(self):
r, index = min(self.values)
self.values[index] = self.generators[index].next()
yield r
def t(l):
for each in l:
yield each
l1 = [2, 5, 6, 8]
l2 = [1, 4, 5, 7]
l3 = [0, 3, 9, 10]
a = GeneratorSort(t(l1), t(l2), t(l3))
但是当我尝试打印排序结果时,我只得到了0,下次出现错误:
>>> for i in a.generate():
print i
0
这是错误:
>>> a.generate()
<generator object generate at 0x7fa7bcc37a00>
>>> a.generate().next()
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
a.generate().next()
File "/home/hamid/projects/bfl/workspace/testo.py", line 10, in generate
r, index = min(self.values)
TypeError: 'int' object is not iterable
>>>
我希望从这个函数中打印出像 1,2,3,4,5 和 ... 排序的数字。有没有其他办法?
请注意,我需要使用生成器。
【问题讨论】: