如何清空Tcl中的列表?

时间:2017-02-06 18:57:04

标签: tcl

如何有效地清空Tcl中的列表?

我尝试使用lreplace清空列表,例如:

set lst "a b c d e"  
lreplace $lst 0 [[llength $lst] - 1]  # replace all content in the list with "".

3 个答案:

答案 0 :(得分:3)

空字符串是一个有效的值。

import sys
import tarfile
try:
    with tarfile.open('temp.xz', 'r:xz') as t:
        t.extract()
except Exception as e:
    print("Error:", e.strerror)

您可以使用set lst {} 而不使用[list];编译成相同的东西。

答案 1 :(得分:0)

如何:set lst [list]

参考文献:list

答案 2 :(得分:0)

请注意

% lreplace $lst 0 [[llength $lst] - 1]
invalid command name "5"

将无效(它尝试执行命令替换5 - 1,如果找不到任何名为5的命令,则会失败。

这是更近的一步:

% lreplace $lst 0 end

但仍然失败,因为它只是生成列表中项目的值,而0end的项目都没有替换。变量lst的内容不会更改。

这就是你的做法*

% set lst [lreplace $lst 0 end]

通过将lreplace的结果分配回变量lst,可以使变量在变量值中生效。

*)这实际上不是你怎么做的,因为它太过分了。 lreplace $lst 0 end的值等于空字符串,因此只需指定:

% set lst {}

文档: lreplaceset

Tcl索引表达式的语法:

  • 整数从零开始的索引号
  • end最后一个元素
  • end -N 最后一个元素之前的 n 元素
  • end + N 最后一个元素之后的 n 元素(实际上, N 应为负数)
  • M-N 元素 m 之前的 n 元素
  • M + N 元素 m 之后的 n 元素

表达式中不能有空格。