【问题标题】:python:loop vs comprehension [duplicate]python:循环与理解[重复]
【发布时间】:2015-03-31 05:54:06
【问题描述】:

我试图用列表做一些简单的程序。 从《学习python》这本书中,我看到了使用推导式的方法。 好吧,我也知道循环可以代替它。 现在我真的很想知道哪个更快,循环或理解。 这些是我的程序。

a = []
for x in range(1, 101):
    a.append(x)

这会将a 设置为 [1, 2, 3, ......, 99, 100]

现在这就是我对理解所做的。

[x ** 2 for x in a]

这就是我对循环所做的。

c = []
for x in a:
    b=[x**2]
    c+=b

任何人都可以说出一种方法来找到上述哪个更快。还请尝试解释理解与循环的不同之处。 任何帮助表示赞赏。

【问题讨论】:

标签: python list loops python-3.x


【解决方案1】:

您可以使用timeit 库,或者只使用time.time() 自己计时:

>>> from time import time
>>> def first():
...     ftime = time()
...     _foo = [x ** 2 for x in range(1, 101)]
...     print "First", time()-ftime
... 
>>> def second():
...     ftime = time()
...     _foo = []
...     for x in range(1, 101):
...             _b=[x**2]
...             _foo+=_b
...     print "Second", time()-ftime
... 
>>> first()
First 5.60283660889e-05
>>> second()
Second 8.79764556885e-05
>>> first()
First 4.88758087158e-05
>>> second()
Second 8.39233398438e-05
>>> first()
First 2.8133392334e-05
>>> second()
Second 7.29560852051e-05
>>> 

显然,列表解析运行得更快,大约是 2 到 3 倍。

【讨论】:

  • 我运行python 3.x,它一直返回First 0.0Second 0.0。我能够理解上面给出的代码是python 2.x。你能帮我转换一下吗它。
  • timeit 库运行良好。我能够看到速度上的巨大差异。非常感谢。
  • @theunixdisaster 没问题 :)
  • 第二个要慢得多,因为循环内部发生了什么:它正在分配一个新列表 [x**2],然后将其与 _foo 的值连接起来(分配第二个新列表),并且将结果分配给_foo。与第二个类似的试验,使用_foo.append(x ** 2) 作为循环体,产生的时间几乎与第一个相同。
猜你喜欢
  • 2018-06-24
  • 2022-01-25
  • 2019-02-19
  • 1970-01-01
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-23
相关资源
最近更新 更多