1

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

现有列表 { 1,3, 5, 9 , 13, 15}

结果列表 { 2,4,6,7,8,10,11,12,14}

4

2 回答 2

3

扩展的 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
于 2013-01-14T21:14:42.170 回答
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
    }
}

有关“ni”运算符,请参见http://tcl.tk/man/tcl8.5/TclCmd/expr.htm#M15

于 2013-01-15T02:37:10.150 回答