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

Mathematica中For循环内调用Tally函数无输出问题咨询

Mathematica For循环内语句无输出问题解决

问题复现

原有实现代码如下,循环体内编写的Tally[Sort[c]]执行时不会输出每次迭代的统计结果,仅在循环全部结束后单独调用Tally可得到最后一次迭代的统计值:

f[x] := -x + 1;
g[x] := -x - 1;

c = {g[0], f[0]}

For[i = 1, i < 8, i++, a = Map[f, c]; b = Map[g, c]; c = Join[a, b]; 
 Tally[Sort[c]]]

问题原因

Mathematica的For/Do/While这类循环结构默认不会自动回显循环体内表达式的求值结果,和单元格逐行输入代码自动输出运算结果的交互逻辑不同:循环内语句仅完成运算、赋值操作,不会主动将中间结果推送至前端展示。

解决方案

方案1:逐次迭代实时打印结果

用Print[]函数包裹需要输出的内容,即可在每次循环执行到对应语句时,把结果直接打印到笔记本界面,还可以附加迭代序号方便区分:

f[x] := -x + 1;
g[x] := -x - 1;
c = {g[0], f[0]};
(* 可选:打印初始集合的统计结果 *)
Print["初始集合统计:", Tally[Sort[c]]];
For[i = 1, i < 8, i++,
 a = Map[f, c];
 b = Map[g, c];
 c = Join[a, b];
 Print["第", i, "次迭代后集合统计:", Tally[Sort[c]]]
]

方案2:收集所有迭代结果统一处理

如果不需要实时打印,想把所有迭代的统计结果存下来做后续计算,可以用Sow/Reap组合收集结果,循环结束后一次性取出所有值:

f[x] := -x + 1;
g[x] := -x - 1;
c = {g[0], f[0]};
allTallyResults = Reap[
    (* 收集初始值统计 *)
    Sow[Tally[Sort[c]], "初始值"];
    For[i = 1, i < 8, i++,
      a = Map[f, c];
      b = Map[g, c];
      c = Join[a, b];
      (* 每次迭代的统计值打上对应i的标签收集 *)
      Sow[Tally[Sort[c]], i]
    ]
  ][[2]];
(* 执行完成后直接调用allTallyResults即可查看所有轮次的统计结果 *)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:48:25