如何有效地清空Tcl中的列表?
我尝试使用lreplace清空列表,例如:
set lst "a b c d e"
lreplace $lst 0 [[llength $lst] - 1] # replace all content in the list with "".
答案 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
但仍然失败,因为它只是生成列表中项目的值,而0
到end
的项目都没有替换。变量lst
的内容不会更改。
这就是你的做法*
% set lst [lreplace $lst 0 end]
通过将lreplace
的结果分配回变量lst
,可以使变量在变量值中生效。
*)这实际上不是你怎么做的,因为它太过分了。 lreplace $lst 0 end
的值等于空字符串,因此只需指定:
% set lst {}
Tcl索引表达式的语法:
end
最后一个元素end
-N 最后一个元素之前的 n 元素end
+ N 最后一个元素之后的 n 元素(实际上, N 应为负数)表达式中不能有空格。