如何在tcl中从n个列表中添加元素/数字?我在python中尝试过,它使用以下方法工作:
[sum(x) for x in zip(*C)]如何在tcl中做到这一点?tcl中有压缩函数吗?
还有其他方法可以做到这一点吗?
我现在有两份名单:
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}]
}我关心的是:我可以有一个或多个清单。那么,在这种情况下,我如何实现呢?
发布于 2020-06-12 16:44:59
要获得两个列表元素的成对和的新列表:
set result [lmap a $list1 b $list2 { expr {$a + $b} }]对三个列表、四个列表等进行明显的添加。
发布于 2020-06-12 17:46:52
据我所知,Tcl中没有类似于zip的功能。但是,如果愿意,可以创建一个。一个粗糙的可能是这样的:
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
}然后你可以像这样使用它:
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发布于 2020-06-14 20:07:08
--那么您不需要每个列表都有一个变量,您需要的是类似于列表的其他内容。
以下是我对肖恩上述建议的看法:
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进行压缩。
https://stackoverflow.com/questions/62347914
复制相似问题