如何用Python遍历嵌套列表计算子列表元素差值总和并调试代码?
代码无法正常运行的核心问题
你的代码存在三个明确的逻辑错误,叠加起来会导致运行直接报错、结果完全不符合预期:
- 计算逻辑顺序错误:需求是每个子列表的第二项减去第一项,但代码里写的是
bus_stops[i][0] - bus_stops[i][1],把两项的计算顺序搞反了 - 返回值位置错误:
return语句写在了for循环内部,循环第一次遍历到第一个子列表时就会直接退出函数返回结果,根本不会继续遍历后面的子列表,循环完全失去作用 - sum函数参数使用错误:
sum()方法要求传入可迭代对象(如列表、生成器)作为参数,但你传进去的是两个整数直接运算得到的单个整数,这也是运行时直接抛出TypeError: 'int' object is not iterable报错的直接原因
修正后的可运行实现
版本1:贴合你原本的循环思路改造
def number(bus_stops): total_diff = 0 # 直接遍历外层列表拿到每个子列表,不需要用range硬取索引 for stop in bus_stops: # 计算每个子列表的第二项减第一项的差值 current_diff = stop[1] - stop[0] total_diff += current_diff # 把return放到循环外面,等所有差值累加完再返回结果 return total_diff print(number([[10,0], [4,5], [3,2]]))
运行这个版本的最终结果为:(0-10) + (5-4) + (2-3) = -10 +1 -1 = -10,完全匹配你的需求。
版本2:更简洁的Python式写法
不需要手动写循环和累加变量,用生成器表达式直接把每个子列表的差值传给sum方法即可,代码更短也更易读:
def number(bus_stops): return sum(stop[1] - stop[0] for stop in bus_stops)
额外提醒:这类公交站点计数的经典题目通常的逻辑是计算每个站点的上车人数减下车人数,最终求车上剩余总人数,和你当前的“第二项减第一项”需求是反的,写代码时注意不要混淆计算顺序。
内容的提问来源于stack exchange,提问作者hobbyiscoding
相关产品推荐
相关产品推荐

