首页 > 解决方案 > Tcl中N个列表中元素/数字的总和?

问题描述

如何从 tcl 的 n 个列表中添加元素/数字?我在 python 中尝试过,它使用以下方法工作:

[sum(x) for x in zip(*C)]

如何在 tcl 中做到这一点?tcl 中有 zip 功能吗?

有没有其他方法可以实现这一目标?

我现在有 2 个列表:

l1 {11 333 4 567 129}
l2 {23 47 56 10 13}

我可以有 N 个列表

我需要从这些列表中返回元素的总和。

对于我在下面实现的两个列表:

set result {}
foreach x $l1 y $l2 {
    lappend result [expr {$x + $y}]
}

我担心的是:我可以有一个或多个列表。那么在那种情况下我该如何实现呢?

标签: tcl

解决方案


然后你不希望每个列表都有一个变量,你想要一个列表之类的东西。

这是我对肖恩上述建议的看法:

set l1 {11 333 4 567 129}
set l2 {23 47 56 10 13}

lappend l $l1 $l2

proc zippedSum {p} {
    set inner [llength [lindex $p 0]]
    set result [list]
    for {set i 0} {$i < $inner} {incr i} {
       lappend result [::tcl::mathop::+ {*}[lmap sublist $p {lindex $sublist $i}]]
    }
    return $result
}

zippedSum $l

您不会维护单独的变量,而是维护列表 ( l)。然后,您将处理每个索引的子列表(最大索引由第一个子列表确定),使用在其他地方推荐的lmap/lindex 组合用于您所谓的压缩。


推荐阅读