我想在给定列表中创建一个缺少数字的数字列表,如下例所示
现有列表 { 1,3, 5, 9 , 13, 15}
结果列表 { 2,4,6,7,8,10,11,12,14}
扩展的 TCL 具有intersect3
作为其返回值之一的功能,它给出了A-B
. 您可以将您的列表与跨越您的列表的所有可能数字的列表相交。
如果你不使用 Extended TCL,你将不得不自己实现一些东西。
我几乎从不使用 TCL,所以也许有更好的方法,但基本方法是对列表进行排序,然后遍历它并找到缺失的值:
#!/usr/bin/tclsh
set A {1 3 5 9 13 15}
set A [lsort -integer $A]
set B {}
set x 0
set y [lindex $A $x]
while {$x < [llength $A]} {
set i [lindex $A $x]
while {$y < $i} {
lappend B $y
incr y
}
incr x
incr y
}
puts $B
输出:
2 4 6 7 8 10 11 12 14
稻田的回答看起来不错。这有点短,假设列表已经排序。
package require Tcl 8.5
set A {1 3 5 9 13 15}
set result [list]
for {set i [lindex $A 0]; incr i} {$i < [lindex $A end]} {incr i} {
if {$i ni $A} {
lappend result $i
}
}
有关“ni”运算符,请参见http://tcl.tk/man/tcl8.5/TclCmd/expr.htm#M15。