我对此有点困惑。不要担心输出。
L = [9, 2, 8, 2, 3, 4, 2]
>>>[i for i, x in enumerate(L) if x == min(L)]
这里,min(L)
在每次迭代中调用吗?或者这样好吗
L = [9, 2, 8, 2, 3, 4, 2]
m = min(L)
>>>[i for i, x in enumerate(L) if x == m]
希望我的问题很清楚。
最佳答案
很容易检查(IPython 控制台):
In [9]: def foo(x):
print "Called."
return True
In [10]: [1 for x in xrange(10) if foo(x)]
Called.
Called.
Called.
Called.
Called.
Called.
Called.
Called.
Called.
Called.
Out[10]: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
对于函数调用的优化,这通常是即时编译器的工作范围。因此,在 PyPy 的情况下,经过一定次数的迭代后,编译器可能会认为这是一个热点,并可能尝试优化函数的内部结构,但我认为这种优化不足以降低复杂性O(n)
到 O(1)
。
关于python - 在迭代中将 "if condition"存储为变量是否合适,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29678589/