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

Python CSV代码异常:指定区域正增长国家的最小/最大人口返回错误

问题:筛选指定区域人口净增长为正的国家,人口极值查询异常

我编写了一段Python代码,意图从CSV文件中筛选出指定区域内人口净增长(Net Change)为正的国家,并从中找出2020年人口(Population(2020))最少和最多的国家。但运行后,最小人口国家和最大人口国家均返回CSV文件中的第一个国家,与预期不符(预期应返回两个不同的对应国家)。

原代码如下:

import csv
import math

def main(file_name, region):

    data = []
    
    with open(file_name, 'r') as file:
        reader = csv.DictReader(file)   #Reads the CSV file and returns a list of dictionaries containing the data
        for row in reader:
            data.append(row)
            
        countries = []
    
    
        for row in data:
            if row['Regions'] == region and float(row['Net Change']) > 0:   #Returns a list of countries in a specific region with positive net change in population
                countries.append(row['Name'])
        #return countries
    
    
                min_population = math.inf
                max_population = -math.inf
                
                min_country = None
                max_country = None
                
    
                if row['Name'] in countries:    #Returns the country with minimum and maximum population in the given list of countries
                    population = int(row['Population(2020)'])
                    if population < min_population:
                        min_population = population
                        min_country = row['Name']
                    if population > max_population:
                        max_population = population
                        max_country = row['Name']
                return min_country, max_country

问题分析

原代码的核心问题是缩进错误和逻辑顺序混乱:

  • 极值变量(min_population、max_country等)的初始化和判断逻辑被错误缩进在if row['Regions'] == region...的代码块内,导致每遇到一个符合条件的国家就重置一次极值变量
  • return语句放在了遍历循环的内部,导致程序只处理第一个符合条件的国家就直接返回结果,后续数据完全没有被处理
  • if row['Name'] in countries属于多余判断,当前行已经满足筛选条件才会被加入countries列表,无需重复验证

修复后的代码

import csv
import math

def main(file_name, region):
    # 初始化极值变量,放在循环外部避免重复重置
    min_population = math.inf
    max_population = -math.inf
    min_country = None
    max_country = None

    with open(file_name, 'r') as file:
        reader = csv.DictReader(file)
        for row in reader:
            # 直接判断区域和净增长条件
            if row['Regions'] == region and float(row['Net Change']) > 0:
                population = int(row['Population(2020)'])
                # 更新最小人口记录
                if population < min_population:
                    min_population = population
                    min_country = row['Name']
                # 更新最大人口记录
                if population > max_population:
                    max_population = population
                    max_country = row['Name']
    
    # 遍历完所有数据后再返回结果
    return min_country, max_country

修复说明

  1. 将极值变量的初始化移到循环外部,确保整个遍历过程中变量只会被初始化一次
  2. 移除多余的data和countries列表,直接在遍历CSV行时完成条件判断和极值更新,减少内存占用
  3. 将return语句移到文件操作块外,确保所有符合条件的国家数据都被处理后再返回结果
  4. 删除无意义的if row['Name'] in countries判断,简化逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 14:03:19