Python中如何不写出数组名,向同一函数传入多数组统计洲属城市数?
解决方案
你的原代码存在几个关键问题:
- 循环内的
return语句会让函数处理第一个元素后直接返回,后续判断和元素完全不会执行 - 依赖全局变量维护计数,代码耦合度高、扩展性差
- 错误遍历
array[0],实际应该直接遍历传入的数组本身
下面是优化后的实现,无需单独定义多个数组名称,同时解决上述问题:
方法1:合并所有城市数据为一个数组传入
def countCities(cities): # 用字典存储各洲计数,结构清晰无需全局变量 continent_counts = { "eu": 0, "as": 0, "am": 0, "sa": 0, "af": 0 } for city in cities: # 提取城市名中的洲标识 continent = city.split("-")[-1] # 仅处理有效洲标识,避免无效数据干扰 if continent in continent_counts: continent_counts[continent] += 1 return continent_counts # 把所有城市数据合并到一个列表中一次性传入 all_cities = [ "london-eu","bangkok-as", "madrid-eu", "paris-eu","milan-eu", "madrid-eu", "budapest-eu", "houston-am","milan-eu", "bogota-sa", "nairobi-af" ] result = countCities(all_cities) print(result) # 输出: {'eu': 6, 'as': 1, 'am': 1, 'sa': 1, 'af': 1}
方法2:让函数支持传入任意数量的城市数组
如果不想合并数组,可以让函数直接接收多个数组参数,自动处理所有数据:
def countCities(*city_arrays): continent_counts = { "eu": 0, "as": 0, "am": 0, "sa": 0, "af": 0 } # 遍历每个传入的数组 for array in city_arrays: for city in array: continent = city.split("-")[-1] if continent in continent_counts: continent_counts[continent] += 1 return continent_counts # 直接传入所有数组,无需单独调用三次 result = countCities( ["london-eu","bangkok-as", "madrid-eu"], ["paris-eu","milan-eu", "madrid-eu", "budapest-eu"], ["houston-am","milan-eu", "bogota-sa", "nairobi-af"] ) print(result) # 输出: {'eu': 6, 'as': 1, 'am': 1, 'sa': 1, 'af': 1}
核心优化点:
- 用字典替代全局变量,计数逻辑更封装、更易维护
- 修正循环和判断逻辑,确保每个城市都被正确遍历和统计
- 两种方法都无需单独处理每个数组名称,一次性传入所有数据即可完成统计
内容的提问来源于stack exchange,提问作者kei
相关产品推荐
相关产品推荐

