[英]Sum digits of numbers in a list
尝试编写一个接受如下列表的函数:
x = [1, 13, 14, 9, 8]
例如,对数字求和,如:
1 + (1+3) + (1+4) + 9 + 8 = 27
到目前为止我尝试过的:
def sum_d(x):
if not x:
return 0
else:
return x[0] + sum_d(x[1:])
这个美女怎么样:
the_sum = sum(int(char) for n in x for char in str(n))
print(the_sum) # prints -> 27
这里发生的事情是,我正在逐个遍历列表中的所有元素( for n in x
),我将它们转换为字符串以便能够逐个字符地遍历每个字符( for char in str(n)
)和最后将所有生成的数字转换回整数后求和( int(char)
)
您可以轻松地将上述内容转换为如下函数:
def sum_of_characters(my_list):
return sum(int(char) for n in my_list for char in str(n))
正如@Jim 所注意到的,这里提出的解决方案无法处理列表中的负数。 可以通过检查以确保char
是数字而不是符号来修改它以使其不会引发错误:
def sum_of_characters(my_list):
return sum(int(char) for n in my_list for char in str(n) if char.isdigit())
让它工作同时保持它作为单个生成器表达式是一项艰巨的任务..
只是为了记录,另一个变体只使用生成器表达式并且可以处理小于 10 或会像这样分解的负数:-14 -> -1 + 4 是这样的:
def sum_of_characters(my_list):
return eval('+'.join(str(char) for n in x for char in str(n)))
稍作修改,您的原始代码将起作用:
def sum_d(x):
x = str(x)
if len(x) == 1:
return int(x)
else:
return int(x[0]) + sum_d(int(x[1:]))
也可以单行:
sum(int(y) for y in (chain(*[str(x) for x in [1, 13, 14, 9, 8]])))
在这里解释:
>>> from itertools import chain
>>> [str(x) for x in [1, 13, 14, 9, 8]]
['1', '13', '14', '9', '8']
>>> chain(*[str(x) for x in [1, 13, 14, 9, 8]])
<itertools.chain object at 0x7feadcd067d0>
>>> list(chain(*[str(x) for x in [1, 13, 14, 9, 8]]))
['1', '1', '3', '1', '4', '9', '8']
>>> sum(int(y) for y in (chain(*[str(x) for x in [1, 13, 14, 9, 8]])))
27
x = [1,13,14,9,8]
number = 0
for element in x:
my_string = str(element)
for i in range(len(my_string)):
number += int(my_string[i])
print(number)
这将做到这一点,但可能有一种方法可以对 int 进行切片,但不涉及将它们转换为字符串。
def sumx(x):
for i in range(0,len(x)):
if(x[i]>10):
sum=0
while(x[i]>0):
sum+=x[i]%10
x[i]=x[i]/10
x[i]=sum
print(x)
>>> sumx(x)
[5, 4, 5, 9, 8]
def SumofNumDig(l):
x = []
for i in l:
c = 0
for j in str(i):
c += int(j)
x.append(c)
return x
n = int(input("Enter the no of elements in the list: "))
l = []
l = list(map(int, input("enter the list of elements:").strip().split(' ')))[:n] #to get integer input
print(SumofNumDig(l))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.