我想查找列表的总数,但发生了错误

时间:2016-02-14 12:42:55

标签: python list python-3.x sum

我想找到cost的总和,但是在我添加[30]之后,出现了一条错误消息。 这是我的代码的一部分:

cost = [['Lounge', 70], ['Bedroom', 70], ['Bathroom', 70], [30]]
print("£", sum(c[1] for c in cost))

这是错误消息之前出现的内容:

Cost: [['Lounge', 70], ['Bedroom', 70], ['Bathroom', 70], [30]]
Total cost: 

这是出现的错误消息:

Traceback (most recent call last):
 File "G:\Dell download may15\Documents\Qadir's file\Putteridge High School\GCSE years\Year 11\Computing\Coding\Python\CA folder\customer.py", line 93, in <module>
    print("£", sum(c[1] for c in cost))
  File "G:\Dell download may15\Documents\Qadir's file\Putteridge High School\GCSE years\Year 11\Computing\Coding\Python\CA folder\customer.py", line 93, in <genexpr>
    print("£", sum(c[1] for c in cost))
IndexError: list index out of range

4 个答案:

答案 0 :(得分:1)

您收到错误,因为c[1]指的是嵌套列表中的第二项,&amp;您的最后 嵌套列表只有一个项目,因此您会收到错误。

这是一个可能的解决办法:

cost = [['Lounge', 70], ['Bedroom', 70], ['Bathroom', 70], [30]]
# Sum all the integers within the nested lists
print("£", sum(num for l in cost for num in l if type(num) == int))

<强>输出:

£ 240

答案 1 :(得分:1)

列表中的最后一个列表没有第二个项目。

答案 2 :(得分:1)

决定发布另一个带有列表解析的答案,因为你已经知道你的嵌套列表的长度不相等而不会循环两次

lister = cost = [['Lounge', 70], ['Bedroom', 70], ['Bathroom', 70], [30]]

print(sum([a[0] if isinstance(a[0], int) else a[1] for a in lister]))

使用type来检查变量是否为int,使用isinstance或者尝试将其转换为int并且如果它不是int则捕获异常是一个坏主意

答案 3 :(得分:1)

要避免带有可变长度列表的IndexError,您可以使用索引-1来获取最后一项。我认为如果您要添加的数字始终位于列表的最后位置,这是最优雅的解决方案。

演示:

>>> cost = [['a', 'b', 1], [2], ['a', 3]]
>>> sum(c[-1] for c in cost)
6