我想找到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
答案 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