Python 构造一个从集合返回唯一值的生成器是否可能且可取
目前我正在这样做:Python 构造一个从集合返回唯一值的生成器是否可能且可取,python,generator,python-2.7,Python,Generator,Python 2.7,目前我正在这样做: # duplicates is a list uniques = list(set(duplicates)) 然而,uniques通常是暂时的。为Unique构建一个生成器是否更好?如果是这样的话,我该怎么做呢?我并不完全清楚您希望通过使用发电机实现什么 有一点很清楚:它不会降低内存需求,因为为了确定当前元素是否唯一,生成器需要知道所有以前看到的唯一元素 此外,在list(set(…)中构造列表的目的并不完全清楚。为什么不继续使用您已经在构建的集合呢?我并不完全清楚您希望通
# duplicates is a list
uniques = list(set(duplicates))
然而,uniques通常是暂时的。为Unique构建一个生成器是否更好?如果是这样的话,我该怎么做呢?我并不完全清楚您希望通过使用发电机实现什么 有一点很清楚:它不会降低内存需求,因为为了确定当前元素是否唯一,生成器需要知道所有以前看到的唯一元素
此外,在
list(set(…)
中构造列表的目的并不完全清楚。为什么不继续使用您已经在构建的集合呢?我并不完全清楚您希望通过使用生成器实现什么
有一点很清楚:它不会降低内存需求,因为为了确定当前元素是否唯一,生成器需要知道所有以前看到的唯一元素
此外,在
list(set(…)
中构造列表的目的并不完全清楚。为什么不继续使用您正在构建的集合呢?如果您不需要列表,只需使用set(duplicates)
。这大概是你记忆使用量的一半。布景很好看
或者,您可以定义生成器:
def uniques(it):
seen = set()
for x in it:
if x not in seen:
yield x
seen.add(x)
但我的预感是,这将比一次性构建一个集合慢得多。在任何情况下,内存消耗量都差不多。如果不需要列表,只需使用
set(duplicates)
。这大概是你记忆使用量的一半。布景很好看
或者,您可以定义生成器:
def uniques(it):
seen = set()
for x in it:
if x not in seen:
yield x
seen.add(x)
但我的预感是,这将比一次性构建一个集合慢得多。在任何情况下,内存消耗都差不多。使用生成器而不是静态集合有两个可能的好处,其中只有一个(可能)适用于这里:
- 内存使用。这里不适用,因为要生成unique,您需要这样或那样的O(n)内存
- 时间-如果您希望只消耗生成的输出的一部分,那么您可以通过惰性地生成它来节省时间。所以如果你是这样的话,那么也许使用发电机可以节省一些处理能力。当然,要懒洋洋地生成unique,您需要记住已经生成的一组值(见上文),并在运行时过滤掉这些值
- 内存使用。这里不适用,因为要生成unique,您需要这样或那样的O(n)内存
- 时间-如果您希望只消耗生成的输出的一部分,那么您可以通过惰性地生成它来节省时间。所以如果你是这样的话,那么也许使用发电机可以节省一些处理能力。当然,要懒洋洋地生成unique,您需要记住已经生成的一组值(见上文),并在运行时过滤掉这些值