我怎样才能更好地编写这些功能才有意义

时间:2017-03-17 11:05:28

标签: python list sum

我打算写一个函数,我可以用它来总结一个有两位数的列表的所有数字。例如:

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)

我该怎么办呢,为什么失败呢。

5 个答案:

答案 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