如何使用TCL在非连续的数字列表中创建包含缺失数字的列表

时间:2013-01-14 20:43:13

标签: arrays list loops tcl

我想在给定列表中创建一个缺少数字的数字列表,如下例所示

现有清单{1,3,5,9,13,15}

结果清单{2,4,6,7,8,10,11,12,14}

2 个答案:

答案 0 :(得分:3)

扩展TCL具有函数intersect3,其作为其返回值之一给出了A-B的列表。您可以将列表与列表中所有可能数字的列表相交。

如果您不使用扩展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

答案 1 :(得分:1)

帕迪的答案看起来很不错。这有点短,假设列表已经排序。

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
    }
}

请参阅http://tcl.tk/man/tcl8.5/TclCmd/expr.htm#M15了解“ni”运算符。