【发布时间】:2013-12-28 02:12:21
【问题描述】:
Q1 - 以下是 set() 还是 generator expression 或 set comprehension? (或者它们是否相同?如果是,list 和 dict 理解是否也在生成器上对应类型转换?)
my_set = {x for x in range(10)}
Q2 - 评估是否考虑重复值,然后通过应用 set() 将其删除?
dup_set = {x for x in [0, 1, 2, 0, 1, 2]}
理解的执行(速度方面)是否比常规的for 循环更好?
更新 - 我尝试使用timeit 进行速度比较。我不确定我是否只是(公平)。
C:\>python -m timeit "s = set()" "for x in range(10):" "
s.add(x)"
100000 loops, best of 3: 2.3 usec per loop
C:\>python -m timeit "s = {x for x in range(10)}"
1000000 loops, best of 3: 1.68 usec per loop
现在,使用一些条件
C:\>python -m timeit "s = set()" "for x in range(10):" "
if x%2: s.add(x)"
100000 loops, best of 3: 2.27 usec per loop
C:\>python -m timeit "s = {x for x in range(10) if x%2}"
1000000 loops, best of 3: 1.83 usec per loop
那么,有很大的不同,是不是因为 c 中硬编码的功能?
【问题讨论】:
-
也许你可以使用 timeit(docs.python.org/2/library/timeit.html) 或者使用 time 模块构建代码计时功能来找出时间/速度差异
标签: python set generator set-comprehension