我对此有些困惑,不要为输出而烦恼。

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/

10-11 06:57