Лучший способ узнать, что является самым быстрым, - это протестировать его!
В этом коде я предполагаю, что вы заботитесь о значении строки, а не о том, какой номер строки.
import timeit
def test_comprehension():
input = open('list.txt')
output = open('output.txt','w')
[output.write(x) for x in input if int(x) > 2 and int(x) < 5]
def test_forloop():
input = open('list.txt')
output = open('output.txt','w')
for x in input:
if int(x) > 2 and int(x) < 5:
output.write(x)
if __name__=='__main__':
times = 10000
from timeit import Timer
t = Timer("test_comprehension()", "from __main__ import test_comprehension")
print "Comprehension: %s" % t.timeit(times)
t = Timer("test_forloop()", "from __main__ import test_forloop")
print "For Loop: %s" % t.timeit(times)
В этом я просто настраиваю пару функций,один, который делает это с пониманием списка, и другой, который делает это как замкнутый круг.Модуль timeit запускает небольшие биты кода указанное вами количество раз, время его выполнения и возвращает время, затраченное на выполнение.Поэтому, если вы запустите приведенный выше код, вы получите что-то вроде следующего:
Понимание: 0.957081079483 Для цикла: 0.956691980362
Достаточно печально, но примерно так же.1010 *