【问题标题】:Python: Adding numbers in a listPython:在列表中添加数字
【发布时间】:2014-01-23 06:38:21
【问题描述】:

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

这就是我到目前为止写的所有内容......

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()

【问题讨论】:

  • 想一想ValueError 何时发生以及发生时您想做什么(跳过?continue? pass?)。是什么让你决定把 for 循环放在里面而不是放在 try/except 外面。
  • 您不应该以这种方式完全重写您的问题。如果您有任何进一步的信息,请编辑并添加到末尾。
  • 请停止从您的问题中删除内容。对于您的三个问题,我不得不恢复三个编辑。谢谢

标签: python list exception-handling


【解决方案1】:

使用生成器消除了对以下行的需要,但作为旁注,当您为此执行以下操作时:

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()

【讨论】:

  • 如果 name == "main": main() 会做什么?
  • 查看here 了解它的作用。
【解决方案2】:

您可以使用generator 表达式,这样:

from numbers import Number

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

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

这将遍历列表并使用isinstance()检查每个元素是否为int/float

【讨论】:

  • 太酷了:我以前没见过 isinstance 匹配一组模式。
  • 你可能真的想在这里使用isinstance(x, numbers.Complex)
  • 甚至,numbers.Number
【解决方案3】:

也许尝试捕捉数字

这个接缝可以工作:

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2022-01-01
      • 1970-01-01
      • 2014-10-27
      • 2015-05-14
      • 1970-01-01
      • 2018-10-06
      • 1970-01-01
      • 1970-01-01
      • 2014-03-07
      相关资源
      最近更新 更多