尝试编写一个带有如下列表的函数:
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:])
答案 0 :(得分:6)
这个美女怎么样:
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)))
答案 1 :(得分:1)
稍作修改,您的原始代码即可使用:
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
答案 2 :(得分:0)
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)
这样做,可能有一种方法来切换不涉及将它们转换为字符串的整数。
答案 3 :(得分:0)
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]
答案 4 :(得分:-1)
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))