在迭代中存储为“if条件”的变量好吗

2024-04-20 06:49:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有点困惑这个。不要担心输出。你知道吗

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]

希望我的问题清楚。你知道吗


Tags: inforifminenumerate
1条回答
网友
1楼 · 发布于 2024-04-20 06:49:48

易于检查(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)。你知道吗

相关问题 更多 >