基于唯一值x,y,z生成所有合法四元素数组的技术实现需求
问题描述
给定三个唯一值x、y、z,需找出所有可能的唯一四元素数组:数组元素由x、y、z的乘积组合构成(包括单个值、两两乘积、三者乘积以及乘法单位元1),且每个数组中x、y、z各自仅被使用一次(即每个值要么单独作为数组元素,要么作为某个乘积的因子,且仅参与一次运算)。
参考简化示例:当给定x、y并生成两元素数组时,结果为:
[x*y, 1] [x, y] [1, x*y] [y, x]
提供的Python骨架代码:
def f(x, y, z): """returns list of 4-element lists""" # ...
解决方案
思路分析
根据题目要求和示例模式,我们需要覆盖三种组合场景,生成每种场景下的所有排列后去重,得到最终的唯一数组:
- 三个单独元素+1:将x、y、z单独作为数组元素,补充1凑成四元素,生成所有排列。
- 两两乘积+单个元素+两个1:将x、y、z中的任意两个相乘得到乘积项,剩下的一个作为单独项,补充两个1凑成四元素,生成所有排列。
- 三者乘积+三个1:将x、y、z三者相乘得到总乘积项,补充三个1凑成四元素,生成所有排列。
借助itertools.permutations生成排列,利用集合自动去重,最后将结果转换为列表返回。
代码实现
from itertools import permutations def f(x, y, z): """返回所有符合要求的四元素列表""" unique_arrays = set() # 场景1:三个单独元素 + 1的所有排列 for perm in permutations([x, y, z, 1]): unique_arrays.add(perm) # 场景2:两两乘积 + 单个元素 + 两个1的所有排列 product_single_pairs = [(x*y, z), (x*z, y), (y*z, x)] for prod, single in product_single_pairs: for perm in permutations([prod, single, 1, 1]): unique_arrays.add(perm) # 场景3:三者乘积 + 三个1的所有排列 total_product = x * y * z for perm in permutations([total_product, 1, 1, 1]): unique_arrays.add(perm) # 转换为列表格式返回 return [list(arr) for arr in unique_arrays]
内容的提问来源于stack exchange,提问作者ben-albrecht
相关产品推荐
相关产品推荐

