LINUX.ORG.RU

Ответ на: комментарий от aedeph_

Второй пример неправильный. Ты заметил, что в цикле у меня нет вызова f(x), а стоит тот же самый комментарий, что в f(x)? Переделывай.

anonymous
()
Ответ на: комментарий от anonymous

Я заметил, что код у тебя вообще ничего не делает.

После переделки стало быстрее на 0.2 секунды. (почему аноним сам не смог провести столь сложный и нетривиальный эксперимент) Что по прежнему медленнее мапа на секунду.

aedeph_ ★★
()
Ответ на: комментарий от mephistopheles

Давайте не будем скатывать ЛОР в сосач, это прежде всего, нормальный ресурс, где можно спросить совета, а не Бред.

Ты оче сильно ошибаешься, лол.

jessey
()
Ответ на: комментарий от aedeph_

Разумеется ничего не делает, это был теоретический вопрос. И ты до сих пор не ответил на него. Да, ты провел опыт, но почему результаты именно такие?

anonymous
()
Ответ на: комментарий от x3al

некрофилов

Ты в своем уме? Вторая ветка еще долго будет жить, а ты ее уже закопал.

anonymous
()
Ответ на: комментарий от anonymous

Потому что высокоуровневые функции разработчиками оптимизированы лучше, чем рукописные костыли пользователей, прикидывающихся этими высокоуровневыми функциями, очевидно же.

aedeph_ ★★
()
Ответ на: комментарий от aedeph_

почему аноним сам не смог провести столь сложный и нетривиальный эксперимент

Enjoy:

import timeit
number = 1000

setup = """
import math
lst = range(10000)
f = (lambda x : math.acos(math.sin(x**2)))
"""
t = timeit.Timer(setup=setup, stmt='''
nlst = list(map(f, lst))
''')
print('map')
print(t.timeit(number=number))
print()

t = timeit.Timer(setup=setup, stmt='''
nlst = []
for x in lst:
    nlst.append(math.acos(math.sin(x**2)))
''')
print('nlst.append')
print(t.timeit(number=number))
print()

t = timeit.Timer(setup=setup, stmt='''
nlst = []
append = nlst.append
for x in lst:
    append(math.acos(math.sin(x**2)))
''')
print('append')
print(t.timeit(number=number))
print()

t = timeit.Timer(setup=setup, stmt='''
nlst = [math.acos(math.sin(x**2)) for x in lst]
''')
print('nlst = [...]')
print(t.timeit(number=number))
print()


map
7.0833330154418945

nlst.append
6.685909986495972

append
6.422300100326538

nlst = [...]
6.269705057144165

anonymous
()
Ответ на: комментарий от aedeph_

Не убедил. И ни разу не очевидно.
У мапа в цикле вызывается функция каждый раз. С другой стороны у нормального цикла есть аппенд, который тот еще тормоз. Кто из них быстрее и почему очень неочевидно.

anonymous
()

Вообще, пользовался бы map'ом в любом случае, был бы язык нормальный. Он может и map(f, map (g, l)) в map (f\circ g, l), и вообще функцию не вызывать, если это простое сложение/вычитание чисел.

Zorn
()
Ответ на: комментарий от aedeph_

Если и делать плохие вещи, то делать хорошо

К чёрту statements:

reduce(lambda x, y: (x[0] + y[0], ""), (map(lambda x, print_=__import__('sys').stdout.write: ((ord(x), print_
(x + " ASCII:" + str(ord(x)) + "\n"))), spisok)))[0]

Virtuos86 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.