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

如何依据列表中的列表名称批量对对应列表执行zip操作?

问题描述

现有以下列表:

Factor1 = [1,2,3,4]
Factor2 = [5,6,7,8]
Factor3 = [9,10,11,12]

以及存储待zip列表名称的组合列表:

Combination = [['Factor1','Factor2'], ['Factor3','Factor1']]

需要参照Combination列表,将对应Factor*列表的元素通过zip组合,得到如下结果:

Combination1 = [(1,5),(2,6),(3,7),(4,8)]
Combination2 = [(9,1),(10,2),(11,3),(12,4)]

实际场景中Combination列表包含上千组组合,需迭代完成上述过程。已知单组操作代码为:

Combination1 = list(zip(Factor1,Factor2))

但不清楚如何将Combination列表中的元素作为zip的输入参数。


解决方案

核心思路是通过变量名字符串获取对应的列表对象,再用解包操作将列表作为zip的参数传入,具体实现代码如下:

Factor1 = [1,2,3,4]
Factor2 = [5,6,7,8]
Factor3 = [9,10,11,12]
Combination = [['Factor1','Factor2'], ['Factor3','Factor1']]

# 初始化结果存储容器
result_list = []

# 迭代处理每组组合
for group in Combination:
    # 根据字符串变量名获取实际列表对象(全局作用域用globals,局部用locals)
    target_lists = [globals()[var_name] for var_name in group]
    # 解包列表作为zip参数,转成列表后存入结果
    result_list.append(list(zip(*target_lists)))

# 提取结果(按需命名)
Combination1 = result_list[0]
Combination2 = result_list[1]

# 验证输出
print(Combination1)  # 输出: [(1, 5), (2, 6), (3, 7), (4, 8)]
print(Combination2)  # 输出: [(9, 1), (10, 2), (11, 3), (12, 4)]

关键细节说明:

  1. 变量名转对象:globals()[var_name]可以通过字符串形式的变量名,获取全局作用域中对应的列表对象;如果列表定义在局部作用域(比如函数内部),则替换为locals()[var_name]。
  2. 解包操作:zip(*target_lists)中的*会把target_lists里的每个列表作为zip的独立参数,效果和手动写zip(Factor1, Factor2)完全一致,完美适配多组变量的迭代场景。
  3. 批量存储:用result_list统一存储所有组合结果,后续可以通过索引直接调用,也可以用字典映射命名(比如{f"Combination{i+1}": res for i, res in enumerate(result_list)}),方便大量组合的管理。

内容的提问来源于stack exchange,提问作者Abdul Mateen Hashim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 23:27:32