我遇到了这个作业问题,参加了关于udemy的课程后,我仍然不知道该如何解决。 这与产量,下一步和发送有关。
这是我需要做的: 指导:
itertools.permutations
生成列表的所有排列,并将它们存储在
排列列表list.sort()
对排列列表进行排序yield
关键字yield
语句是否获得了输入列表,如果是,则清空排列列表并重复步骤2 下面是我尝试的代码,它不支持send函数,并且继续使用旧的LIST。
def permute(items):
permu_list = [perm for perm in pr(items)]
permu_list.sort()
for x in permu_list:
yield x
这是结果的典范:
>>> g = permute(['b', 'a', 'c'])
>>> next(g)
('a', 'b', 'c')
>>> next(g)
('a', 'c', 'b')
>>> g.send(['e', 'q', 'c'])
('c', 'e', 'q')
>>> next(g)
('c', 'q', 'e')
答案 0 :(得分:0)
您可以在yield语句中获取通过赋值发送的值。 喜欢:
received = yield something
对于您的用法,您需要额外的知识,可以通过yield from
语句从其他生成器产生。在您的情况下,您需要这样的东西:
def permute(items):
permu_list = [perm for perm in pr(items)]
permu_list.sort()
for x in permu_list:
l = yield x
if l:
yield from permute(l)
break
在有l = yield x
的行中,如果您只是简单地在生成器上调用next,那么我会收到已发送到该生成器的任何内容,因此我编写了一个if语句来检查它是否为{ {1}}值,或者它是来自generator的send方法的。
之后,我从获得的同一生成器函数中创建并使用另一个生成器。通过None
创建一个新的生成器,然后通过None
发送该生成器的输出作为输出,之后,我不想继续从第一个列表生成置换,因此我打破了循环。>
有关更多信息,请检查this two parted article。