tcl - 在 Tcl 中查找列表元素之间的差异
问题描述
我是使用 Tcl 的初学者。我将它用作 VMD(分子可视化)软件将其用作脚本语言。
我有一个蛋白质的原子位置坐标列表,例如:{{1 2 3} {7 9 13}, ...}
我有一个具有不同位置的相同长度的单独列表说:{{3 5 2} {7 3 8}, ...}
。
VMD 有一个内置vecsub
函数,可以减去{1 2 3}
和{3 5 2}
给出{-2 -3 1}
。我编写了一个foreach
循环来迭代整个列表并计算vecsub
.
我的代码如下:\
set sel1 [atomselect 0 "protein"] # selecting protein1
set sel2 [atomselect 1 "protein"] # selecting protein2
# create a list of same length as protein to store values
# $sel1 get index returns length of protein
foreach i [$sel1 get index] {
lappend x 0
}
# veclength2 returns square of vector length
# $sel1 get {x y z} returns a position list as described earlier
foreach i [$sel1 get index] {
lset x $i [expr [veclength2 [vecsub [lindex [$sel1 get {x y z}] $i] [lindex [$sel2 get {x y z}] $i]]]]
}
在 Tcl 中是否有另一种方法可以做到这一点?也许类似于 python 数组减法?
解决方案
我会试试这个,但这只是一个猜测
set x [lmap p1 [$sel1 get {x y z}] p2 [$sel2 get {x y z}] {
expr [veclength2 [vecsub $p1 $p2]]
}]
有了这个,就不需要预先声明了$x
推荐阅读
- swift - Placenote Swift - 加载同一张地图后位置错误
- android - 单个 ImageButton 上的多个可绘制对象
- python - 展开多列
- kubernetes - Kops 和 Terraform k8s 集群重新创建
- android - 检查用户是否首次通过 Android 中的 Firebase 手机身份验证进行身份验证
- java - 警告:指定的 SHA1 算法和 SHA1withRSA 算法将在以后的更新中禁用
- c# - Unity - 在面对目标时添加了额外的偏移量,Rotate() 与 transform.rotation 之间可能存在差异?
- java - 在axis2(v 1.5.6)生成的存根中禁用Web服务寻址属性
- amazon-web-services - 如何在 AWS 代码部署之外更新 AWS Fargate 服务以更改所需的任务计数
- tensorflow - “pip install models”:命令出错,退出状态为 1:python setup.py egg_info 检查日志以获取完整的命令输出