Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 25, 2010 21:03:02

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Вопрос о грамотности

Андрей Светлов
operator - это хорошо и быстро. Используйте его везде, где можно.
быстро, но медленней чем лямбда и простое суммирование
from timeit import Timer
t = Timer("c = operator.iadd(321654,98654)", "import operator")
print t.timeit(number=10000000)

t = Timer("c = su(321654,98654)", "su = lambda a,b:a+b")
print t.timeit(number=10000000)

t = Timer("c = 321654+98654", "")
print t.timeit(number=10000000)
1.98863911629
1.78381896019
0.360954999924

Офлайн

#2 Апрель 25, 2010 21:27:40

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Вопрос о грамотности

o7412369815963
быстро, но медленней чем лямбда и простое суммирование
Ну да, медленнее, если брать пример, не связанный с поставленной задачей.
А если протестить все реально предложенные решения, то таки медленее:
from timeit import Timer
t = Timer("c = reduce(operator.add, [[1, 2, 3], [4, 5, 6], [7, 8, 9]], [])", "import operator")
print t.timeit(number=100000)

t = Timer("c = list(itertools.chain(*[[1, 2, 3], [4, 5, 6], [7, 8, 9]]))", "import itertools")
print t.timeit(number=100000)

t = Timer("c = reduce(lambda x, y: x + y, [[1, 2, 3], [4, 5, 6], [7, 8, 9]], [])", "")
print t.timeit(number=100000)

t = Timer("c = sum([[1, 2, 3], [4, 5, 6], [7, 8, 9]], [])", "")
print t.timeit(number=100000)
Результаты:
0.373862028122
0.445660114288
0.464900970459
0.321706056595

PS: У меня под рукой был 2.4, поэтому пришлось iadd заменить на add.



Отредактировано (Апрель 25, 2010 21:29:43)

Офлайн

#3 Апрель 25, 2010 21:43:13

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Вопрос о грамотности

Вот как меняется картинка для более новых питонов. Но лямбда все равно проигрывает operator.iadd.
python2.5:
0.270653009415
0.605501890182
0.348989009857
0.249788999557

python2.6:
0.256490945816
0.545876026154
0.3670399189
0.248121976852

python3.1:
0.259869098663
0.42289686203
0.35302400589
0.241573095322



Офлайн

#4 Апрель 25, 2010 22:16:52

python4ik
От:
Зарегистрирован: 2010-01-05
Сообщения: 251
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос о грамотности

А по самому первому вопросу я правильно написал(по простому)?

arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
a=input('value=')
if 0<a<10:
for x in arr:
if a in x:
x.append(' a='+str(a))
print x;break
print x
Или
arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
a=input('value=')
if 0<a<10:
for x in arr:
for y in x:
print y,
if y%3==0:print
if a==y:break
if a==y:break
print 'a=',a



Отредактировано (Апрель 25, 2010 22:55:43)

Офлайн

#5 Апрель 26, 2010 14:23:37

T0M
От:
Зарегистрирован: 2010-04-23
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос о грамотности

Всем спасибо за ответы!

Ed
А к чему все эти лишние сущности вообще?
Код:
sum(a, )
На мой взгляд, самый интересный и компактный вариант)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version