python sum digits

Sume los dígitos de un número-python



digits (9)

Al hacer algunos desafíos de Codecademy, resolví esto como sigue:

def digit_sum(n): arr = [] nstr = str(n) for x in nstr: arr.append(int(x)) return sum(arr)

Si quiero encontrar la suma de los dígitos de un número, es decir:

  • Entrada: 932
  • Salida: 14 , que es (9 + 3 + 2)

¿Cuál es la forma más rápida de hacer esto?

Instintivamente hice:

sum(int(digit) for digit in str(number))

y encontré esto en línea:

sum(map(int, str(number)))

¿Cuál es mejor usar para la velocidad, y hay otros métodos que son aún más rápidos?


Esto podría ayudar

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


Puedes hacerlo puramente en enteros, y será el más eficiente:

def sum_digits(n): s = 0 while n: s += n % 10 n //= 10 return s

o con divmod :

def sum_digits2(n): s = 0 while n: n, remainder = divmod(n, 10) s += remainder return s

Pero ambas líneas que publicaste están bien.

Aún más rápido es la versión sin asignaciones aumentadas:

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


Si desea seguir sumando los dígitos hasta que obtenga un número de un solo dígito (una de mis características favoritas de números divisibles por 9) puede hacer:

def digital_root(n): x = sum(int(digit) for digit in str(n)) if x < 10: return x else: return digital_root(x)

Que en realidad resulta ser bastante rápido ...

%timeit digital_root(12312658419614961365) 10000 loops, best of 3: 22.6 µs per loop


También puedes usar esto:

def sum_digits(num): num = str(num) digitSum = 0 for i in num: digitSum += int(i) return digitSum print sum_digits(875)


la mejor manera es usar una lista de comprensión:

sum([int(digit) for digit in str(abs(number))])


def digitsum(n): result = 0 for i in range(len(str(n))): result = result + int(str(n)[i:i+1]) return(result)

"resultado" se inicializa con 0.

Dentro del bucle for, el número (n) se convierte en una cadena que se divide con el índice de bucle (i) y obtiene cada dígito. ---> str (n) [ i: i + 1 ]

Este dígito cortado se convierte de nuevo a un número entero ----> int (str (n) [i: i + 1])

Y, por lo tanto, se agrega al resultado.


n = str(input("Enter the number/n")) list1 = [] for each_number in n: list1.append(int(each_number)) print(sum(list1))


num = 123 dig = 0 sum = 0 while(num > 0): dig = int(num%10) sum = sum+dig num = num/10

print (sum) // asegúrese de agregar espacio por encima de esta línea