目前我在做这个构建发电机返回唯一值:是否可能,建议从集合
# duplicates is a list
uniques = list(set(duplicates))
然而,唯一往往是暂时性的。为唯一身份构建一个发电机会更好吗?如果是这样,我将如何做到这一点?
目前我在做这个构建发电机返回唯一值:是否可能,建议从集合
# duplicates is a list
uniques = list(set(duplicates))
然而,唯一往往是暂时性的。为唯一身份构建一个发电机会更好吗?如果是这样,我将如何做到这一点?
有使用发电机,而不是静态的集合,其中只有一个(可能)在这里也适用两种可能的好处:
内存使用情况。这里不适用,因为要产生唯一性,你需要这种方式的O(n)内存或其他方法
时间 - 如果您希望仅消耗部分生成的输出,那么您可以通过延迟生成来节省时间。所以,如果这是你的情况,那么使用发电机可以为你节省一些处理能力。当然,为了产生独特的懒惰,你需要记住已经产生的一组值(见上),并在你去的时候过滤掉它们。
我不完全清楚你希望通过使用发电机来实现什么。
有一点很清楚:它不会降低内存需求,因为为了确定当前元素是否是唯一的,生成器需要知道先前看到的所有独特元素。
另外,在list(set(...))
中构建列表的目的还不完全清楚。为什么不坚持你已经构建的套装?
如果您不需要列表,请改为使用set(duplicates)
。这大概减半了你的记忆使用。集合是可迭代的。
或者,您也可以定义一个发电机:
def uniques(it):
seen = set()
for x in it:
if x not in seen:
yield x
seen.add(x)
,但我的直觉是,这将不仅仅是一次性构建一组慢了许多。无论如何,内存消耗大致相同。