我对此有些困惑,不要为输出而烦恼。
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 - 在迭代中将其存储为“如果条件”的变量是否很好,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29678589/