如果我想找到的数量,即数字的总和:
- 输入:
932
- 输出:
14
,其是(9 + 3 + 2)
什么是这样做的最快的方法?
我本能地做:
sum(int(digit) for digit in str(number))
我发现这个在线:
sum(map(int, str(number)))
这是最好用的速度,以及是否有任何其他的方法,这是更快?
如果我想找到的数量,即数字的总和:
932
14
,其是(9 + 3 + 2)
什么是这样做的最快的方法?
我本能地做:
sum(int(digit) for digit in str(number))
我发现这个在线:
sum(map(int, str(number)))
这是最好用的速度,以及是否有任何其他的方法,这是更快?
您可以在整数纯粹做到这一点,这将是最有效的:
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
如果你想保持总结数字,直到你得到一个位数的号码 ,你可以做(我最喜欢的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
这可能帮助
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
这样做我解决了这个像一些Codecademy网站的挑战:
def digit_sum(n):
arr = []
nstr = str(n)
for x in nstr:
arr.append(int(x))
return sum(arr)
您也可以使用此:
def sum_digits(num):
num = str(num)
digitSum = 0
for i in num:
digitSum += int(i)
return digitSum
print sum_digits(875)
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])
因此增加所导致的。
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()
你也可以用built_in_function称为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)
你可以采取任何数量的数字
在解决问题的挑战的一个网站找到的。 不是我的,但它的作品。
num = 0 #replace 0 with whatever number you want to sum up print(sum([int(k) for k in str(num)]))
num = 123
dig = 0
sum = 0
while(num > 0):
dig = int(num%10)
sum = sum+dig
num = num/10
打印(和)//确保添加这条线以上的空间
你可以试试这个
def sumDigits(number):
sum = 0
while(number>0):
lastdigit = number%10
sum += lastdigit
number = number//10
return sum
n = str(input("Enter the number\n"))
list1 = []
for each_number in n:
list1.append(int(each_number))
print(sum(list1))