喜 我有以下列表
%set qprList {{{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} 12345 {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} 12345 {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} 12345 {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} 12345 {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}}}
我想删除所有空的元素。因为列表的列表是我无法在单循环交互中进行。
实现这一目标的任何简单方法?
答案 0 :(得分:3)
该列表中没有空元素。似乎为空的那些可以被视为(a)字符串“{}”或(b)具有一个元素的列表,该元素是空字符串或空列表。
package require struct::list
set non_empty [struct::list filter \
[struct::list flatten $qprList] \
{apply {{x} {expr {[string length $x] > 0}}}} \
]
答案 1 :(得分:2)
你也可以试试这个:
set listwithoutnulls [lsearch -all -inline -not -exact $listwithnulls {}]
它不需要包含。它也可以重新应用。
答案 2 :(得分:1)
来自Tclers Wiki(http://wiki.tcl.tk/440):
要拼合列表:
concat {*}$nested
可以多次应用:
proc flatten data { concat {*}$data }
set a {{a {b c}} {d {e f}}} ; # {a {b c}} {d {e f}} flatten $a ; # a {b c} d {e f} flatten [flatten $a] ; # a b c d e f
答案 3 :(得分:0)
我也使用struct :: list,因为我很懒:
package require struct::list
set non_empty [struct::list flatten -full $qprList]