如何获取tcl中两个索引号之间的元素列表

如何获取tcl中两个索引号之间的元素列表,tcl,Tcl,我有一份清单,例如: 设{0均值0 12均值1 345均值2 678910均值3 12 12 13 14 15 } 现在,我想自动化我的代码,以便创建不同的列表,例如: list1 {mean0 one two} list2 {mean1 three four five} list3 {mean2 six seven eight nine ten} list4 {mean3 12 13 14 15} 在tcl有没有办法做到这一点?任何指导都将不胜感激 您可以使用lsearch查找以“mean”

我有一份清单,例如: 设{0均值0 12均值1 345均值2 678910均值3 12 12 13 14 15 }

现在,我想自动化我的代码,以便创建不同的列表,例如:

list1 {mean0 one two}
list2 {mean1 three four five}
list3 {mean2 six seven eight nine ten}
list4 {mean3 12 13 14 15}

在tcl有没有办法做到这一点?任何指导都将不胜感激

您可以使用
lsearch
查找以“mean”开头的所有元素的索引。为最后一部分添加列表的长度。从列表中选择第一个索引作为起点,然后循环其余索引。
lrange
命令可以为您提供部分列表。一个迭代的结束索引将是下一个迭代的开始索引

结合起来,可将其编码为:

foreach p2 [lassign [linsert [lsearch -all $a mean*] end [llength $a]] p1] {
    puts [lrange $a $p1 [expr {$p2 - 1}]]
    set p1 $p2
}

索引可以用偏移量表示:
lrange$a$p1$p2-1
--ref“string index”True,但这需要将整数闪烁为字符串,使其比使用
expr
更慢。这在这里可能不重要,但我只是坚持使用
expr
的习惯。我更喜欢双foreach:
foreach p1[set idx[lsearch…]]p2[list{*}[lrange$p1 1 end][llength…]{
。它比较长,但不那么棘手。答案确实帮助了我解决了我的问题。非常感谢!!我建议您将子列表存储在列表中,而不是存储在单独命名的变量中。您是否计划使用变量
list1
list2
,等等?如果是,请不要!改用数组(
list(1)
list(2)
等)。