我打算写一个函数,我可以用它来总结一个有两位数的列表的所有数字。例如:
a=[1,2,11,100,10]
should return 21 since 11 and 10 of the list are having two digits
我还希望数字范围为(0,1,2,... 100000)
def solution(A):
for integer in A:
if integer > 9 and integer <100:
two_digits_array.append(integer)
return sum( two_digits_array )
我想它没关系,所以在测试时:
Example test: numbers= [47, 1900, 1, 90, 45]
print (solution(numbers))
wow it works perfectly and returns 182
但我试过这些:
q= [1, 1000, 80, -91]
WRONG ANSWER (got 80 expected -11)
我该怎么办呢,为什么失败呢。
答案 0 :(得分:4)
为什么要这么难?您可以简单地使用带过滤器的生成器,并将该生成器传递给sum(..)
内置函数。像:
def solution(A):
return sum(x for x in A if -100 < x < -9 or 9 < x < 100)
或者如@PawełKordowski所示,使用abs(..)
使条件更优雅:
def solution(A):
return sum(x for x in A if 9 < abs(x) < 100)
无需声明额外的数组(只会占用内存)。
<expr> for <var> in <iterable> if <condition>
是一个生成器:它通过在<expr>
上为<var>
应用<iterable>
来生成 lazily 一系列数字如果符合<condition>
,则v1.begin()
中的元素。
答案 1 :(得分:2)
试试这个
print sum(filter(lambda x: (x<100 and x>9) or (x>-100 and x<-9), a))
假设a是列表。
答案 2 :(得分:2)
请使用此更新的脚本
def solution(A):
for integer in A:
if (integer > 9 and integer < 100) or (integer > -100 and integer < -9):
two_digits_array.append(integer)
return sum( two_digits_array )
答案 3 :(得分:1)
您正在检查大于9且小于100的数字。试试这个:
如果整数&gt; 9和整数<100或整数&gt; -100和整数&lt; -9:
答案 4 :(得分:1)
您可以使用len()来计算数字的数字:
ans=0
for i in a:
if(len(str(abs(i)))==2:
ans+=i
return ans