用List Comprehension排除表头州名后二维列表按列求和生成total
代码调整说明
你原写法的核心偏差:
- 求和方向错误:需求是按列累加四个字段的总和,不是按行计算元素和
- 边界处理缺失:没有跳过顶部表头行,也没有剔除每行开头的州名字符串,直接求和会因为字符串无法做数值运算触发类型错误
方案1:易读遍历实现
手动维护四个累加位,逐行遍历有效数据:
# 初始对应Gas、Air、Food、Party四个字段的累加值 total = [0, 0, 0, 0] # 切片跳过第0行的表头,从第一行数据开始遍历 for row in statesData[1:]: total[0] += row[1] # 累加Gas值 total[1] += row[2] # 累加Air值 total[2] += row[3] # 累加Food值 total[3] += row[4] # 累加Party值
方案2:紧凑列表推导式
利用zip的列转置特性,一行完成计算:
total = [sum(col) for col in zip(*(row[1:] for row in statesData[1:]))]
执行逻辑拆解:
statesData[1:]切片移除表头行row[1:]逐行去掉开头的州名字段,仅保留四个可累加的数值zip(*...)把逐行存储的数值重组成列维度的集合,即所有Gas值为一组、所有Air值为一组,依此类推- 对每个列集合做求和,得到的结果顺序完全匹配Gas、Air、Food、Party的字段要求
内容的提问来源于stack exchange,提问作者RoiMinuit
相关产品推荐
相关产品推荐

