Python 如何不从生成器返回重复的值?

Python 如何不从生成器返回重复的值?,python,generator,yield,Python,Generator,Yield,我有如下功能: def fun(content): for i in content: id = i.split('\"')[0] yield id return id 问题是内容中存在一些重复的值。 有没有办法知道值“id”是否已经在生成器“id”中?您可以在fun中使用set来跟踪已经看到的ID,而不是获取最终的生成器,然后使用set() def fun(content): observed = set() for i

我有如下功能:

def fun(content):
    for i in content:
        id = i.split('\"')[0]
        yield id    
    return id
问题是内容中存在一些重复的值。
有没有办法知道值“id”是否已经在生成器“id”中?您可以在
fun
中使用
set
来跟踪已经看到的ID,而不是获取最终的生成器,然后使用set()

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
成为一个返回jut的生成器,那么一套会更简单,而且本质上是一样的。明白了,谢谢!:)