Python:在列表中添加数字

时间:2014-01-05 22:37:03

标签: python list exception-handling

问题是迭代列表并计算并返回列表中任何数值的总和。

到目前为止,这就是我所写的......

def main():
    my_list = input("Enter a list: ")
    total(my_list)

def total(my_list1):
    list_sum = 0 
    try:
        for number in my_list1:
            list_sum += number
    except ValueError:
         #don't know what to do here

    print list_sum

main()

4 个答案:

答案 0 :(得分:3)

您可以使用generator表达式:

from numbers import Number

a = [1,2,3,'sss']

sum(x for x in a if isinstance(x,Number)) # 6

这将迭代列表并使用isinstance()

检查每个元素是否为int / float

答案 1 :(得分:3)

如果您查看whether the list item is an int,则可以使用生成器:

>>> a = [1, 2, 3, 'a']
>>> sum(x for x in a if isinstance(x, int))
6

答案 2 :(得分:1)

也许尝试并抓住数字

这种接缝起作用:

data = [1,2,3,4,5, "hfhf", 6, 4]
result= []
for d in data:   
    try:
        if float(d):
            result.append(d)
    except:
        pass    

print sum(result) #25, it is equal to 1+2+3+4+5+6+4

答案 3 :(得分:0)

使用生成器不需要下面的行,但作为旁注,当你为此做这样的事情时:

try:
    for number in my_list1:
        list_sum += number
except ValueError:
     #don't know what to do here

您需要在数字上调用float()以在计算字符串时强制使用ValueError。此外,某些内容需要遵循您的except,这可能只是pass或打印声明。这样做只会逃避当前循环而不会继续计数。如前所述,如果您只是想忽略字符串,那么使用生成器是可行的方法。

def main():
    my_list = input("Enter a list: ")
    total(my_list)
    return

def total(my_list1):
    list_sum = 0 
    try:
        for number in my_list1:
            list_sum += float(number)
    except ValueError:
        print "Error"
    return list_sum

if __name__ == "__main__":
    main()