Суммируйте цифры числа - python
Если я хочу найти сумму цифр числа, то есть:
- Вход:
932
- Выход:
14
, который (9 + 3 + 2)
Каков самый быстрый способ сделать это?
Я инстинктивно сделал:
sum(int(digit) for digit in str(number))
и я нашел это онлайн:
sum(map(int, str(number)))
Что лучше всего использовать для скорости, и есть ли еще другие методы, которые еще быстрее?
Ответы
Ответ 1
Вы можете сделать это чисто в целых числах, и это будет наиболее эффективно:
def sum_digits(n):
s = 0
while n:
s += n % 10
n //= 10
return s
или с divmod
:
def sum_digits2(n):
s = 0
while n:
n, remainder = divmod(n, 10)
s += remainder
return s
Но обе строки, которые вы опубликовали, прекрасны.
Еще быстрее версия без дополнительных назначений:
def sum_digits3(n):
r = 0
while n:
r, n = r + n % 10, n // 10
return r
> %timeit sum_digits(n)
1000000 loops, best of 3: 574 ns per loop
> %timeit sum_digits2(n)
1000000 loops, best of 3: 716 ns per loop
> %timeit sum_digits3(n)
1000000 loops, best of 3: 479 ns per loop
> %timeit sum(map(int, str(n)))
1000000 loops, best of 3: 1.42 us per loop
> %timeit sum([int(digit) for digit in str(n)])
100000 loops, best of 3: 1.52 us per loop
> %timeit sum(int(digit) for digit in str(n))
100000 loops, best of 3: 2.04 us per loop
Ответ 2
Если вы хотите продолжать суммирование цифр, пока не получите однозначное число (одна из моих любимых характеристик чисел, делящихся на 9), вы можете сделать:
def digital_root(n):
x = sum(int(digit) for digit in str(n))
if x < 10:
return x
else:
return digital_root(x)
Что на самом деле получается довольно быстро...
%timeit digital_root(12312658419614961365)
10000 loops, best of 3: 22.6 µs per loop
Ответ 3
Это может помочь
def digit_sum(n):
num_str = str(n)
sum = 0
for i in range(0, len(num_str)):
sum += int(num_str[i])
return sum
Ответ 4
Выполняя некоторые проблемы с Codecademy, я решил это как:
def digit_sum(n):
arr = []
nstr = str(n)
for x in nstr:
arr.append(int(x))
return sum(arr)
Ответ 5
Вы также можете использовать это:
def sum_digits(num):
num = str(num)
digitSum = 0
for i in num:
digitSum += int(i)
return digitSum
print sum_digits(875)
Ответ 6
def digitsum(n):
result = 0
for i in range(len(str(n))):
result = result + int(str(n)[i:i+1])
return(result)
"результат" инициализируется с 0.
Внутри цикла for число (n) преобразуется в строку, которую нужно разделить с помощью индекса цикла (i) и получить каждую цифру. ---> str (n) [ i: я + 1 ]
Эта нарезанная цифра преобразуется обратно в целое число → int (str (n) [i: я + 1])
И, следовательно, добавил к результату.
Ответ 7
def sumOfDigits():
n=int(input("enter digit:"))
sum=0
while n!=0 :
m=n%10
n=n/10
sum=int(sum+m)
print(sum)
sumOfDigits()
Ответ 8
Вы также можете попробовать это с помощью встроенной_функции с именем divmod();
number = int(input('enter any integer: = '))
sum = 0
while number!=0:
take = divmod(number, 10)
dig = take[1]
sum += dig
number = take[0]
print(sum)
Вы можете взять любое количество цифр
Ответ 9
Нашел это на одном из сайтов по решению проблем. Не мое, но это работает.
num = 0 #replace 0 with whatever number you want to sum up print(sum([int(k) for k in str(num)]))
Ответ 10
reduce(op.add,map(int,list(str(number))))
Тестовое задание:
from datetime import datetime
number=49263985629356279356927356923569976549123548126856926293658923658923658923658972365297865987236523786598236592386592386589236592365293865923876592385623987659238756239875692387659238756239875692856239856238563286598237592875498259826592356923659283756982375692835692385653418923564912354687123548712354827354827354823548723548235482735482354827354823548235482354823548235482735482735482735482354823548235489235648293548235492185348235481235482354823548235482354823548235482354823548234
startTime = datetime.now()
for _ in range(0,100000) :
out=reduce(op.add,map(int,list(str(number))))
now=datetime.now()
runningTime=(now - startTime)
print ("Running time:%s" % runningTime)
print(out)
Продолжительность: 0: 00: 13.122560 2462
Ответ 11
Попробуйте это
print(sum(list(map(int,input("Enter your number ")))))
Ответ 12
num = 123
dig = 0
sum = 0
while(num > 0):
dig = int(num%10)
sum = sum+dig
num = num/10
print (sum)//не забудьте добавить пробел над этой строкой
Ответ 13
Вы можете попробовать это
def sumDigits(number):
sum = 0
while(number>0):
lastdigit = number%10
sum += lastdigit
number = number//10
return sum
Ответ 14
n = str(input("Enter the number\n"))
list1 = []
for each_number in n:
list1.append(int(each_number))
print(sum(list1))