You need to enable JavaScript to run this app. 如何实现Python多列表全组合生成,支持动态调整国家列表数量
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Python多列表全组合生成,支持动态调整国家列表数量

解决方案

你需要的是多列表的笛卡尔积生成,优先用Python标准库itertools.product实现,性能更高、可扩展性更强,完全满足你提出的两点要求。

标准库实现方案

import itertools

# 原始数据定义
traveler = ["John", "Joseph", "Mary", "Anna"]
brazil_destinations = ["Sao Paulo", "Rio de Janeiro", "Salvador", "Curitiba", "Porto Alegre", "Belo Horizonte"]
us_destinations = ["New York", "Orlando", "Miami", "Denver", "Houston", "Phoenix"]
italy_destinations = ["Rome", "Venice", "Florence"]
germany_destinations = ["Munich", "Berlin", "Bohn", "Bremen"]

# 按顺序组装待组合的列表,新增/减少国家仅需修改该列表即可
combine_sequence = [
    traveler,
    brazil_destinations,
    us_destinations,
    italy_destinations,
    germany_destinations
]

# 生成所有合法组合,将元组转为列表匹配输出格式要求
result = [list(item) for item in itertools.product(*combine_sequence)]

方案优势

  • 灵活扩展:国家目的地列表增减无需修改核心逻辑,仅调整combine_sequence的元素即可
  • 性能优异:itertools.product为C语言实现,执行效率远高于纯Python编写的递归逻辑
  • 代码简洁易维护,无额外边界条件需要处理

递归实现方案(如有自定义逻辑需求可使用)

如果需要基于递归做定制化扩展,可以用以下纯Python递归实现:

def generate_combinations(lists: list, current_path: list = None, result: list = None) -> list:
    if current_path is None:
        current_path = []
    if result is None:
        result = []
    # 递归终止条件:所有列表都遍历完成
    if not lists:
        result.append(current_path.copy())
        return result
    # 取当前第一个列表遍历所有元素
    for item in lists[0]:
        current_path.append(item)
        # 递归处理剩余列表
        generate_combinations(lists[1:], current_path, result)
        # 回溯
        current_path.pop()
    return result

# 调用方式和标准库版本一致
result = generate_combinations(combine_sequence)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 06:30:02