Форум сайта python.su
> что-то пытаетесь доказать
Я? Да мне как-то на всё это положить :-).
Ладно, я сделал необходимые выводы и более этот вопрос мне не интересен, скучно. Считаю данную тему для себя закрытой.
..bw
Офлайн
Гы. Судя по тому, что вы написали, выводы вы сделали неправильные. Ну да ладно, закрыли так закрыли. Удачи!
Офлайн
Ребята, не ссорьтесь.
Ваш спор выглядит несколько смешно - оба варианта достаточно хороши.
Настолько, что нужно либо что-то менять в постановке задачи - либо “и так сойдет”.
Если все же хотите меряться скоростью - сделайте на Cython или на Python C API - задачка как раз под это.
К тому же на знании о том, что обрабатываемые байты - str можно еще немного выиграть.
Офлайн
Да мы и не ссоримся. Я лично люблю расставлять точки над i. Если мне говорят ‘быстрее’, я меряю и оно медленнее, то я так и пишу. А уходить из спора вместо признания что неправ неспортивно. Но это сугубо мое мнение :)
Офлайн
Андрей Светлов сделал очень правильное замечание по поводу timeit в посте http://python.su/forum/viewtopic.php?pid=54540#p54540
я тоже решил проверить, что быстрее:
import timeit
from itertools import ifilter, imap, izip, islice
lst = ["fffdks","fffkdj","fffkdk","fffkdl","fffkjj","fffkjk","fffkjl","fgskdf"]
def _filter(s):
for i in xrange(len(s)-1):
if s[i] == s[i + 1]: return False
return True
def _filter2(s):
for i in xrange(1, len(s)):
if s[i - 1] == s[i]: return False
return True
def _filter3(s):
for a, b in izip(s, islice(s, 1, None)):
if a == b: return False
return True
if "__main__" == __name__:
t1 = timeit.Timer("filter(_filter, lst)",
"from __main__ import _filter, lst, izip, islice")
t2 = timeit.Timer("filter(_filter2, lst)",
"from __main__ import _filter2, lst, izip, islice")
t3 = timeit.Timer("filter(_filter3, lst)",
"from __main__ import _filter3, lst, izip, islice")
print(t1.timeit(100000))
print(t2.timeit(100000))
print(t3.timeit(100000))
# к выше приведенному коду добавил функцию
def test():
filter(_filter, lst)
filter(_filter2, lst)
filter(_filter3, lst)
# после строки print(t3.timeit(100000)) добавил
cProfile.run("test()", "test.prof")
Отредактировано (Авг. 20, 2010 07:09:55)
Офлайн