list - 取 List X 的最大值,并与 List Y 进行比较,找到 Y 中的最大值,使用 TCL 将其添加到新列表中
问题描述
我有两个列表,假设 X 和 Y。找到列表 X 的最高值,并将其与列表 Y 的值进行比较,如果 Y 的值大于 X,则使用 TCL 将其添加到新列表中。
set X[list 1.2156476714e-04 1.1284486163e-03 1.9818406145e-01 2.9287846814e-04 2.0217831320e-04]
set Y[list 1.2156476714e-04 1.1284486163e-03 4.5386226702e-02 4.4706815970e-02 8.4928524302e-03 6.0775778365e-03 3.1041158763e-03 1.5045881446e-01 4.1016753016e-04 1.1655993148e-03 1.8736355969e-03 2.9444883694e-02 2.5420340535e-02 2.0819682049e-03 9.5297318694e-03 8.5498101043e-04 1.5580140825e-02 8.0796216935e-03 4.8684447393e-02 1.6464813962e-01]
取 List X 的最大值,将其与 List Y 的每个值进行比较。如果 List Y 的值大于 X 值,则将其添加到新列表中。
解决方案
找到事物的最大值是max()
函数 (in expr
)的事情,除了我们想将它应用到一个列表,所以我们直接调用函数的实现命令,这样我们就可以通过扩展输入值列表:
set max_X [tcl::mathfunc::max {*}$X]
# ^^^^^^^^^^^^^^^ ^^^ Expansion: pass what follows as many arguments
# Function calls get transformed into invokes of commands in the tcl::mathfunc namespace
对于第二个列表的过滤,写一个程序是最清楚的。过滤可以使用foreach
或来实现lmap
;后者实际上只是 a foreach
,如果它们是正常结果而不是像 a那样收集值continue
。
这两个版本的过程基本上做同样的事情:
proc filter_greater_than {value list} {
lmap x $list {expr {$x > $value ? $x : [continue]}}
}
proc filter_greater_than {value list} {
set result {}
foreach x $list {
if {$x > $value} {
lappend result $x
}
}
return $result
}
然后,您可以使用如下过程:
set new_list [filter_greater_than $max_X $Y]
推荐阅读
- python - 在 Python 中将类“方法”转换为列表
- css - 使用位置时保持宽度:固定
- r - 修改 ggplot 中的 facet (strip) *variable* 标签
- python - ijson kvitems unexpected behaviour
- reactjs - 如何在构建 React 应用程序时清除缓存
- python - Dash 应用程序 - 为多页应用程序验证动态创建布局 [错误:在 Dash 回调的“状态”中使用了不存在的对象。]
- next.js - 配置 NextAuth.js Keycloak 提供程序
- ruby-on-rails - 在 Rails 的会话中存储密码
- flutter - Flutter:未调用 addPostFrameCallback 回调
- python-3.x - 从字节数组中拆分字符串