Tcl 中 N 个列表中 elements/numbers 的总和?
Sum of elements/numbers in N lists in Tcl?
如何从 tcl 中的 n 个列表中添加 elements/numbers?
我已经在 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 个列表
我需要从这些列表中 return 逐元素求和。
对于我在下面实现的两个列表:
set result {}
foreach x $l1 y $l2 {
lappend result [expr {$x + $y}]
}
我担心的是:我可以有一个或多个列表。那么在那种情况下我该如何实施?
获取两个列表元素的成对和的新列表:
set result [lmap a $list1 b $list2 { expr {$a + $b} }]
对三个列表、四个列表等进行明显的添加
据我所知,在 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
Then you don't want a variable per list, you want something else like a list of lists.
这是我对肖恩上述推荐的看法:
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
)。然后,您将处理每个索引的子列表(最大索引由第一个子列表确定),使用其他地方推荐的 来进行压缩。
如何从 tcl 中的 n 个列表中添加 elements/numbers? 我已经在 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 个列表
我需要从这些列表中 return 逐元素求和。
对于我在下面实现的两个列表:
set result {}
foreach x $l1 y $l2 {
lappend result [expr {$x + $y}]
}
我担心的是:我可以有一个或多个列表。那么在那种情况下我该如何实施?
获取两个列表元素的成对和的新列表:
set result [lmap a $list1 b $list2 { expr {$a + $b} }]
对三个列表、四个列表等进行明显的添加
据我所知,在 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
Then you don't want a variable per list, you want something else like a list of lists.
这是我对肖恩上述推荐的看法:
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
)。然后,您将处理每个索引的子列表(最大索引由第一个子列表确定),使用其他地方推荐的