Найти - Пользователи
Полная версия: Вопрос о грамотности
Начало » Python для новичков » Вопрос о грамотности
1 2 3
o7412369815963
Андрей Светлов
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
Ed
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.
Ed
Вот как меняется картинка для более новых питонов. Но лямбда все равно проигрывает 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
python4ik
А по самому первому вопросу я правильно написал(по простому)?
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
T0M
Всем спасибо за ответы!
Ed
А к чему все эти лишние сущности вообще?
Код:
sum(a, )
На мой взгляд, самый интересный и компактный вариант)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB