【问题标题】:compare the values of two lists with scientific values in tcl and return the highest values in new list将两个列表的值与 tcl 中的科学值进行比较,并在新列表中返回最高值
【发布时间】:2020-09-22 07:42:29
【问题描述】:

我想将两个列表与科学值进行比较,并将最高值存储在新列表中。 说吧,

set X_value [list 1.215647671415354e-7 1.1284486163276597e-6 0.00019818406144622713 2.9287846814440854e-7 2.0217831320223922e-7]

set Y_value [list 1.215647671415354e-7 1.1284486163276597e-6 4.538622670224868e-5 4.4706815970130265e-5 8.492852430208586e-6 6.077577836549608e-6 3.1041158763400745e-6 0.00015045881445985287 4.1016753016265284e-7 1.165599314845167e-6 1.8736355968940188e-6 2.9444883693940938e-5 2.5420340534765273e-5 2.0819682049477706e-6 9.529731869406532e-6 8.549810104341304e-7 1.558014082547743e-5 8.079621693468653e-6 4.868444739258848e-5 0.0001646481396164745]

需要将X_value的每个值与Y_value进行比较,并将Y_value的较高值添加到新列表中。由于我是TCL新手,我发现实现这一点有困难。

【问题讨论】:

  • 你是什么意思?您的意思是要在特定索引处获得更大的值吗?当两个列表的长度不同时会发生什么,如您的示例所示?
  • 不是特别索引,我想将Y_value的元素与X_value进行比较,如果Y_value大于X_value,则将其添加到新列表中。取Y_value并与X_value进行比较。
  • 我只是想准确地了解您要做什么。我可以很容易地写出可能是你想要的东西,但也可能是完全错误的。现在,我可以看到列表中的前两项是相同的,后面的不是,但我不知道这有什么意义。 您希望通过样本输入数据获得什么结果?
  • 前两项是从 Y_value 中提取并添加到 X_Value 中,同样 X_Value 中的其他 3 个值也是从其他曲线中提取的。预期输出为 [0.0001646481396164745] 或 [1.64582E-04]

标签: list tcl list-comparison


【解决方案1】:

假设您要进行 成对 比较,从 X_Value 累积一个新的值列表,这些值大于来自 Y_Value对应 值,然后停止一次任一列表已用尽:

proc pick_excess {X_list Y_list} {
    set result {}
    foreach x $X_list y $Y_list {
        if {($x ne "") && ($y ne "") && ($x > $y)} {
            lappend result $x
        }
    }
    return $result
}
puts [pick_excess $X_Value $Y_Value]

或者也可以这样(避免字符串比较):

proc pick_excess {X_list Y_list} {
    set limit [expr {min([llength $X_list], [llength $Y_list]) - 1}]
    return [lmap x [lrange $X_list 0 $limit] y [lrange $Y_list 0 $limit] {
        string cat [expr {$x <= $y ? continue : $x}]
    }]
}
puts [pick_excess $X_Value $Y_Value]

注意!您正在比较(双精度)浮点数,通常最好仔细考虑浮点数何时应该被认为与两种方法相等产生“相同”值的方法实际上可能会产生以最低有效位(或更多,如果其中一种算法不是很好)变化的值。小心点。

【讨论】:

  • 感谢您的回复。但是使用第一种方法,我得到了不同的输出。 Y_value 的最大值是 [0.0001646481396164745 ] 或 [1.64582E-04],但我得到 [4.4706815970130265e-5 8.492852430208586e-6]。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多