1

我想用一个数字划分整个列表。假设我取一个变量 $Content,我想用 300 个节点划分以下列表。所以我接受命令 $Content/300

  1. $内容= {1 2 3 4 5}{ 2 3 4 5 6} { 4 5 6 7 8 9}{3 4 6 8 9 0}

结果输出是 {1 2 3 4 5}{ 2 3 4 5 6} { 4 5 6 7 8 9}{3 4 6 8 9 0}/300 括号缺失和无效参数。

请告诉我我们如何用单个数字(300 个节点)划分所有列表,因为在大括号中,每个数字都是一些参数的输出

4

1 回答 1

1

请注意,Tcl 是一种对空格非常敏感的语言,因此您需要在 $Content 声明中的右大括号和左大括号之间留一个空格。

您可以遍历 $Content,并且对于每个子列表,遍历元素并除以 300,收集结果:

set Content {{1 2 3 4 5} { 2 3 4 5 6} { 4 5 6 7 8 9} {3 4  6 8 9 0}}
# note the spaces ......^............^..............^
set divisor 300
set newContent [list]
foreach sublist $Content {
    set newSublist [list]
    foreach elem $sublist {
        lappend newSublist [expr {$elem * 1.0 / $divisor}]
    }
    lappend newContent $newSublist
}
puts $newContent

输出是

{0.0033333333333333335 0.006666666666666667 0.01 0.013333333333333334 0.016666666666666666} {0.006666666666666667 0.01 0.013333333333333334 0.016666666666666666 0.02} {0.013333333333333334 0.016666666666666666 0.02 0.023333333333333334 0.02666666666666667 0.03} {0.01 0.013333333333333334 0.02 0.02666666666666667 0.03 0.0}

如果您的 Tcl 版本是 8.6,您可以使用以下lmap命令来缩短代码:

set newContent [lmap sublist $Content {
    lmap elem $sublist {expr {$elem * 1.0 / $divisor}}
}]

请注意,我乘以1.0使用浮点除法而不是整数除法。

于 2017-01-31T17:34:23.283 回答