【问题标题】:How to not return duplicate values from a generator?如何不从生成器返回重复值?
【发布时间】:2018-05-02 07:53:19
【问题描述】:

我有如下功能:

def fun(content):
    for i in content:
        id = i.split('\"')[0]
        yield id    
    return id

问题是内容中有一些重复的值。 有没有办法知道值“id”是否已经在生成器“id”中?而不是得到最终的生成器然后使用 set()?

【问题讨论】:

    标签: python generator yield


    【解决方案1】:

    您可以在fun 中使用set 来跟踪已经看到的ID:

    def fun(content):
        observed = set()
        for i in content:
            id = i.split('\"')[0]
            if id not in observed:
                observed.add(id)
                yield id
    

    此外,由于您正在生成 id,因此您不需要在最后返回。

    【讨论】:

    • 我认为生成器会使用更少的内存?如果在里面使用 set() ,为什么不直接返回最终的 set() ?我在这里很困惑。
    • 生成器将使用更少的内存,但是确保不会输出重复值的唯一方法是跟踪在某种类型的数据结构中出现的值。如果您不需要 fun 作为生成器,则返回一个集合会更简单且基本相同。
    • 知道了,谢谢!:)
    猜你喜欢
    • 2019-04-13
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 2016-10-06
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多