使用Python生成器的直方图问题?

2024-04-26 09:35:41 发布

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

我是新的发电机和合作。我试图用生成器模拟常见的直方图问题(给定一个列表,返回该列表中每个元素的出现次数)。你知道吗

def genFunc():
    dct = {}
    while True:
        num = yield
        if num not in dct.keys():
            dct[num]=1
        else:
            dct[num]+=1
        print dct


g = genFunc()
next(g)

for each in [1,1,1,2]:
    print g.send(each)

通过上面的代码,我可以打印出字典“dct”在每个阶段的状态。如何将其返回到调用函数?如果我在while块之外使用return,我会得到错误-不能使用yield的return。你知道吗

据我所知,send中传递的值由生成器在yield语句中接收。在这种情况下,理想情况下我希望传递一个数字/整数并返回dict的当前状态


Tags: insend列表return状态情况num发电机
1条回答
网友
1楼 · 发布于 2024-04-26 09:35:41

yield“返回”数据。您使用它来接收来自调用者的数据,但也可以用于发送数据:

def genFunc():
    dct = {}
    while True:
        num = yield dct  # I'm yielding the dictionary
        if num not in dct.keys():
            dct[num] = 1

        else:
            dct[num] += 1


g = genFunc()
next(g)

for each in [1, 1, 1, 2]:
    print g.send(each)

{1: 1}
{1: 2}
{1: 3}
{1: 3, 2: 1}

send返回生成的内容。你知道吗

相关问题 更多 >