2015-03-31 4 views
0

Я пытался сделать несколько простых процедур, используя списки. Из книги изучения питона я увидел метод использования понимания. Ну, я также знал, что петля может заменить его. Теперь я действительно хочу знать, что быстрее, цикл или понимание. Это мои программы.python: loop vs comprehension

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 

Может ли один сказать способ, чтобы найти, какой из выше faster.Please также попытаться объяснить, что как постижения отличаются от петель. Любая помощь приветствуется.

+2

HTTP://stackoverflow.com/questions/1593019/is-there-any-simple-way-to-benchmark-python-script и http://stackoverflow.com/questions/6563314/understanding-list-comprehension-vs-traditional-loop -and-build – Amadan

+0

Признаки списков, как правило, немного быстрее. Этот вопрос содержит некоторые технические детали низкого уровня: http://stackoverflow.com/q/22108488/1558022 – alexwlchan

+1

Чувак, вместо того, чтобы спрашивать, что быстрее, просто измерьте его. – freakish

ответ

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.

+0

Я запускаю python 3.x, и он возвращает 'First 0.0' и' Second 0.0' все время. Я смог понять, что приведенный выше код - это python 2.x. Не могли бы вы помочь мне в его преобразовании. – theunixdisaster

+0

Библиотека 'timeit' работала отлично. Я смог увидеть огромную разницу в скорости. Большое спасибо. – theunixdisaster

+0

@ theunixdisaster no problem :) –