问题是迭代列表并计算并返回列表中任何数值的总和。
到目前为止,这就是我所写的......
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()
答案 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()