python - 在迭代中将 "if condition"存储为变量是否合适

标签 python for-loop

我对此有点困惑。不要担心输出。

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/

相关文章:

r - 创建循环以向列添加标签 : library(Hmisc)

python - 为什么我的代码返回脚本路径而不是绝对文件路径?

for-loop - 如何通过管道输入 for 循环 Elixir

python - heapq.nlargest() 的关键函数

Linux下Python子进程Popen准备Python路径

python - 如何在一行中使用 raw_input 值来在 python 中获取输入

java - 循环内的数据库调用有其他选择吗?

python - 如何查看 Dash 应用程序中的活跃用户数?

python - 如何在tox中设置环境变量?

R:编写for循环计算差值并存储在新变量中