如何实现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
相关产品推荐
相关产品推荐

