Python中多列表排列组合生成及键值对关联访问问题
解决键对与对应数值数组的关联排列问题
我来帮你搞定这个需求!先明确下场景,我先假设你的输入示例大概是这样的(方便你对照调整):
# list1:存储键对,每个元素是(input, target)形式的元组 list1 = [('inputData1', 'targetData1'), ('inputData1', 'targetData2')] # list2:对应list1的数值数组,每个索引位置的列表对应list1同索引键对的两组数组 list2 = [[[1,2,3], [4,5,6]], [[7,8,9], [10,11,12]]]
你之前用itertools.product()可能生成了键对和数组的全量笛卡尔积,但这不是你要的“对应键的数值数组关联”的结果。正确的做法是先把list1和list2按索引配对,再为每个键对生成和自身对应数组的组合,具体实现有两种方式:
方式1:简洁的列表推导式
直接用嵌套列表推导式一步到位,代码最精简:
list3 = [key_pair + (arr,) for key_pair, arrays in zip(list1, list2) for arr in arrays]
运行后list3的结果就是你想要的关联排列:
[ ('inputData1', 'targetData1', [1, 2, 3]), ('inputData1', 'targetData1', [4, 5, 6]), ('inputData1', 'targetData2', [7, 8, 9]), ('inputData1', 'targetData2', [10, 11, 12]) ]
方式2:用itertools.product分步实现(如果你偏好显式调用工具库)
如果你想保留用itertools.product()的习惯,也可以这样写:
import itertools list3 = [] # 先把键对和对应数组列表一一配对 for key_pair, arrays in zip(list1, list2): # 生成当前键对与自身所有数组的组合 # 注意要把key_pair放到列表里,否则product会拆分元组的每个元素 pairs = itertools.product([key_pair], arrays) # 把组合后的嵌套元组展开成单层元组,加入结果列表 list3.extend([pair[0] + (pair[1],) for pair in pairs])
核心逻辑解释
zip(list1, list2):保证每个键对只会和自己对应的数组列表配对,不会乱关联;- 遍历每个数组列表里的元素,把键对元组和数组合并成新的元组,这样就实现了“键与对应数值数组关联”的排列需求。
内容的提问来源于stack exchange,提问作者nasil122002
相关产品推荐
相关产品推荐

