发电机,让路,派Python来

2024-04-26 15:07:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到了这个家庭作业的问题,在参加了一门关于ude的课程后,我仍然不知道如何解决它。 这是关于产量,下一个和发送。你知道吗

这就是我需要做的: 指引:

  1. 使用itertools.permutations生成列表的所有排列,并将它们存储在 排列列表
  2. 使用list.sort()对排列列表排序
  3. 迭代排列列表时使用yield关键字
  4. 检查yield语句是否获得了输入列表,如果是,清空排列列表并重复步骤2

下面是我尝试过的代码,它不支持send函数,继续使用旧列表。你知道吗

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')

Tags: insend列表foritemssortlist课程
1条回答
网友
1楼 · 发布于 2024-04-26 15:07:03

您可以在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的行中,如果您只需在这里调用您接收的None的生成器上的next,那么我将接收发送到此生成器的任何内容,因此我编写了一个if语句来检查它是None值还是来自生成器的send方法。你知道吗

在那之后,我从我们得到的相同的生成器函数中创建并使用另一个生成器。通过permute(l)我创建了一个新的生成器,通过yield from我将这个生成器的输出作为输出发送,之后我不想继续从第一个列表生成置换,所以我中断了循环。你知道吗

有关更多信息,请查看this two parted article。你知道吗

相关问题 更多 >