首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tcl中N个列表中元素/数字之和?

Tcl中N个列表中元素/数字之和?
EN

Stack Overflow用户
提问于 2020-06-12 15:52:57
回答 3查看 1.9K关注 0票数 0

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

代码语言:javascript
复制
[sum(x) for x in zip(*C)]

如何在tcl中做到这一点?tcl中有压缩函数吗?

还有其他方法可以做到这一点吗?

我现在有两份名单:

代码语言:javascript
复制
l1 {11 333 4 567 129}
l2 {23 47 56 10 13}

我可以有N个名单

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

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

代码语言:javascript
复制
set result {}
foreach x $l1 y $l2 {
    lappend result [expr {$x + $y}]
}

我关心的是:我可以有一个或多个清单。那么,在这种情况下,我如何实现呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-06-12 16:44:59

要获得两个列表元素的成对和的新列表:

代码语言:javascript
复制
set result [lmap a $list1 b $list2 { expr {$a + $b} }]

对三个列表、四个列表等进行明显的添加。

票数 0
EN

Stack Overflow用户

发布于 2020-06-12 17:46:52

据我所知,Tcl中没有类似于zip的功能。但是,如果愿意,可以创建一个。一个粗糙的可能是这样的:

代码语言:javascript
复制
proc zip {lists} {
    set result {}

    for {set i 0} {$i < [llength [lindex $lists 0]]} {incr i} {
        set elem {}
        foreach list $lists {
            if {$i >= [llength $list]} {return $result}
            lappend elem [lindex $list $i]
        }
        lappend result $elem
    }
    return $result
}

然后你可以像这样使用它:

代码语言:javascript
复制
set l1 {11 333 4 567 129}
set l2 {23 47 56 10 13}

set ln [list $l1 $l2]

set sum [lmap x [zip $ln] {::tcl::mathop::+ {*}$x}]
# 34 380 60 577 142
票数 0
EN

Stack Overflow用户

发布于 2020-06-14 20:07:08

--那么您不需要每个列表都有一个变量,您需要的是类似于列表的其他内容。

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

代码语言:javascript
复制
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 combo进行压缩。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62347914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档