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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 11:27:29