如何从 tcl 列表中删除空元素

发布于 2024-10-21 08:32:58 字数 690 浏览 1 评论 0原文

你好 我有以下清单

% 设置 qprList {{{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} 12345 {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} 12345 {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} 12345 {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} 12345 {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}} {{}}}

我想删除所有空元素。由于列表列表是我无法在单循环交互中完成的。

有什么简单的方法可以实现这一目标吗?

hi
I have following list

% set qprList {{{}} {{}} {{}} {{}}
{{}} {{}} {{}} {{}} {{}} {{}} {{}}
{{}} {{}} {{}} 12345 {{}} {{}} {{}}
{{}} {{}} {{}} {{}} {{}} {{}} {{}}
{{}} {{}} {{}} {{}} {{}} {{}} {{}}
{{}} {{}} {{}} {{}} {{}} {{}} {{}}
{{}} 12345 {{}} {{}} {{}} {{}} {{}}
{{}} {{}} {{}} {{}} {{}} {{}} {{}}
{{}} {{}} {{}} {{}} {{}} {{}} {{}}
{{}} {{}} {{}} {{}} {{}} {{}} 12345
{{}} {{}} {{}} {{}} {{}} {{}} {{}}
{{}} {{}} {{}} {{}} {{}} {{}} {{}}
{{}} {{}} {{}} {{}} {{}} {{}} {{}}
{{}} {{}} {{}} {{}} 12345 {{}} {{}}
{{}} {{}} {{}} {{}} {{}} {{}} {{}}
{{}} {{}}}

I want to remove all the elements which are empty. since list of list is i am not able to do it in single loop interation.

Any simple way to achieve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

灯下孤影 2024-10-28 08:32:58

该列表中没有空元素。看起来空的可以被认为是(a)字符串“{}”或(b)具有一个元素的列表,该元素是空字符串或空列表。

package require struct::list
set non_empty [struct::list filter \
                 [struct::list flatten $qprList] \
                 {apply {{x} {expr {[string length $x] > 0}}}} \
              ]

There are no empty elements in that list. The ones that seem empty can be considered as (a) a string "{}" or (b) a list with one element which is an empty string or an empty list.

package require struct::list
set non_empty [struct::list filter \
                 [struct::list flatten $qprList] \
                 {apply {{x} {expr {[string length $x] > 0}}}} \
              ]
江城子 2024-10-28 08:32:58

您也可以尝试这个:

set listwithoutnulls [lsearch -all -inline -not -exact $listwithnulls {}]

它不需要包含包。它也可以重新应用。

You might also try this:

set listwithoutnulls [lsearch -all -inline -not -exact $listwithnulls {}]

It doesn't require a package include. It, too, can be re-applied.

苍景流年 2024-10-28 08:32:58

来自 Tclers Wiki (http://wiki.tcl.tk/440):

要展平列表:

连接{*}$嵌套

可以多次应用:

proc 展平数据 {
连接{*}$数据
}

设置一个 {{a {bc}} {d {ef}}} ; # {a {bc}} {d {ef}}
压平 $a ; # a {bc} d {ef}
压平[压平$a]; # abcde f

Coming from the Tclers Wiki (http://wiki.tcl.tk/440):

To flatten a list:

concat {*}$nested

It can be applied multiple times:

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

长亭外,古道边 2024-10-28 08:32:58

我也使用 struct::list 因为我很懒:

package require struct::list
set non_empty [struct::list flatten -full $qprList]

I also use struct::list because I am lazy:

package require struct::list
set non_empty [struct::list flatten -full $qprList]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文