Форум сайта python.su
sum(map(int, str(123456)))
Офлайн
Не люблю map.
Оно, конечно, быстрее немного. Но легче читать запись i for i in …
Офлайн
Андрей Светлов, какое быстрее? Вы все в строку переводите инт. Что-уж там…
Офлайн
maxwell
Есть очень интересный ньюанс.
Создание фрейма - дорогая операция.
Я померял - вариант Ed на timeit занимает 5.6, тогда как мой 7.3
Знаю почему.
Если желаете поговорить о том, что в Питоне быстро, а что медленно - буду рад.
Только, пожалуйста, создайте новую тему.
Офлайн
Вероятно, трудно будет придумать адекватную и интересную тему, не привязанную к этому контексту.
В принципе, тут будет преждевременная оптимизация, портящая наглядность, но “сишные” способы будут быстрее.
Например (вероятно, не самые красивые способы):
def calc_numbers1(number):
res = 0
divisor = 1
while divisor < number:
res += (number % (divisor*10)) // (divisor)
divisor *= 10
return res
def calc_numbers2(number):
res = 0
while number:
res += number % 10
number //= 10
return res
Офлайн
Kogrom, описанные вами способы самые адекватные.
И, главное, заставляют «думать».
Офлайн
def andrej(number):
return sum(int(i) for i in str(number))
def ed(number):
return sum(map(int, str(number)))
def calc_numbers1(number):
res = 0
divisor = 1
while divisor < number:
res += (number % (divisor*10)) // (divisor)
divisor *= 10
return res
def calc_numbers2(number):
res = 0
while number:
res += number % 10
number //= 10
return res
def calc_numbers3(number):
res = 0
while number:
res = res + number % 10
number = number // 10
return res
In [3]: timeit andrej(1234567)
100000 loops, best of 3: 9.15 us per loop
In [4]: timeit ed(1234567)
100000 loops, best of 3: 8.54 us per loop
In [5]: timeit calc_numbers1(1234567)
100000 loops, best of 3: 3.19 us per loop
In [6]: timeit calc_numbers2(1234567)
100000 loops, best of 3: 2.02 us per loop
In [7]: timeit calc_numbers3(1234567)
100000 loops, best of 3: 2.03 us per loop
Отредактировано (Сен. 22, 2010 15:21:27)
Офлайн
def digit_sum(n):
s = str(n)
return sum(map(ord, s)) - len(s)*ord('0')
Отредактировано (Сен. 22, 2010 15:40:54)
Офлайн
maxwell, моё мнение - наиболее адекватен способ от Ed, ибо наиболее лаконичен.
Zubchick, я не понял, к чему этот пример.
Офлайн
Kogromда так, мне казалось на пару вызовов меньше должно быть,а вышло на оборот. А остальные так для общей картины.
Zubchick, я не понял, к чему этот пример.
Офлайн