You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python列表检索指定年份数据后,无法正确打印最值问题求助

问题排查与修复方案

错误1:列表填充方式错误

你使用year_and_lifeExpectancy_list.append([x for x in all_rows if index in x[2]])时,append会把筛选得到的整个列表作为单个元素添加到目标列表中,导致最终结构变成三层嵌套:[[[国家1, 代码, 年份, 预期寿命], [国家2, ...], ...]],而非预期的两层结构[[国家1,...], [国家2,...], ...]。

修复方式:

  • 直接赋值(推荐):year_and_lifeExpectancy_list = [x for x in all_rows if index in x[2]]
  • 或用extend替代append:year_and_lifeExpectancy_list.extend([x for x in all_rows if index in x[2]])

错误2:循环逻辑与最值计算错误

原循环的遍历对象是错误嵌套的列表,且未正确收集所有预期寿命数据并匹配对应国家:

  • 当前循环中,x是整个筛选后的列表(因嵌套问题),x[0]是第一个国家的完整条目,x[3]是第四个国家的条目。此时max(x[3])是对单个国家的条目做字符串最大值计算,自然会出现DZA、1959这类不符合预期的结果。

正确逻辑应为:遍历每个国家条目,提取数值型的预期寿命,同时记录对应国家,最后匹配最值与国家。修复后的代码示例:

# 正确填充目标列表
year_and_lifeExpectancy_list = [x for x in all_rows if index in x[2]]

# 初始化最值与对应国家变量
max_life = -float('inf')
min_life = float('inf')
max_country = ""
min_country = ""

# 遍历每个国家的条目
for item in year_and_lifeExpectancy_list:
    country = item[0]
    # 将预期寿命转为浮点数,避免字符串比较错误
    life_expectancy = float(item[3])
    
    # 更新最大值
    if life_expectancy > max_life:
        max_life = life_expectancy
        max_country = country
    # 更新最小值
    if life_expectancy < min_life:
        min_life = life_expectancy
        min_country = country

# 输出结果
print(f'The max life expectancy was in {max_country} with {max_life}')
print(f'The min life expectancy was in {min_country} with {min_life}')

额外注意事项

  • 确保index是字符串类型的年份(如"1959"),避免类型不匹配导致筛选失败
  • 必须将预期寿命转为数值类型(float),否则字符串按ASCII码排序会得到错误的最值(例如"90"会被判定为大于"100")

内容的提问来源于stack exchange,提问作者Michael Lopez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 06:18:28