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
相关产品推荐
相关产品推荐

