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

Python循环调用函数,如何将输入与函数值保存为矩阵格式?

问题:将多变量函数的求值结果整理为指定矩阵格式

我定义了一个函数f,想要在x、y、z的所有组合下对其求值,一开始用了列表推导式:

x = range(60,70)
y = range(0,5)
z = ["type1", "type2"]
results = [f(v,w,j) for v in x for w in y for j in z]

现在results是一个长向量,但我希望得到如下格式的扁平矩阵(每个变量组合对应四个连续元素:变量值+函数结果):

[x1, y1, z1, f(x1,y1,z1), x2, y1, z1, f(x2,y1,z1), ..., x9, y1, z1, f(x9,y1,z1),
 x1, y2, z1, f(x1,y2,z1), x2, y2, z1, f(x2,y2,z1), ..., x9, y2, z1, f(x9,y2,z1),
 x1, y1, z2, f(x1,y1,z2), ...]

要覆盖所有可能的组合。我尝试了以下代码:

z = []
for v in x:
    for w in y:
        for j in z:
            z = [v, w, j, f(v,w,j)]

这段代码格式看似正确,但仅能得到一种场景的结果,恳请提供解决指导。


解决方案

你的问题主要有两个点:一是每次循环都用z = [v, w, j, f(v,w,j)]直接覆盖了列表,而不是把新结果追加进去;二是你把循环变量z和结果列表用了同一个名字,这会导致循环提前“跑偏”——第一次赋值后z就变成了四元素列表,不再是原来的["type1", "type2"]了,后续循环自然无法正常执行。

这里给你两种贴合需求的解决办法:

方法1:修改循环代码,正确追加结果

先把结果列表的名字和变量z区分开,比如叫final_results,然后用extend方法把每个组合的四个元素依次加入列表,同时调整循环顺序来匹配你想要的输出结构:

x = range(60,70)
y = range(0,5)
z_types = ["type1", "type2"]  # 改名避免冲突
final_results = []

# 按z→y→x的顺序遍历,确保输出顺序符合你的要求
for j in z_types:
    for w in y:
        for v in x:
            # 把当前组合的四个元素一次性加入结果列表
            final_results.extend([v, w, j, f(v, w, j)])

这样输出的final_results会先排列所有z1下的y1对应x全组合,再y2对应x全组合,以此类推,最后处理z2的所有组合,完全匹配你期望的格式。

方法2:用列表推导式+链式合并实现

如果你偏好简洁的写法,可以用嵌套列表推导式生成每个组合的四元素子列表,再用itertools.chain把所有子列表合并成一个扁平大列表:

from itertools import chain

x = range(60,70)
y = range(0,5)
z_types = ["type1", "type2"]

final_results = list(chain.from_iterable(
    [v, w, j, f(v, w, j)] for j in z_types for w in y for v in x
))

这种写法和方法1的逻辑完全一致,只是更紧凑,最终得到的final_results同样是你需要的扁平矩阵格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:48:11