删除 Julia 列表中的空字符串

Aft*_*ray 5 list julia

我正在寻找有效的解决方案来删除 Julia 列表中的空字符串。

这是我的清单:

li = ["one", "two", "three", " ", "four", "five"]
Run Code Online (Sandbox Code Playgroud)

我可以使用for 循环删除空字符串,如下所示:

new_li = []
for i in li
    if i == " "
    else
        push!(new_li, i)
    end
end
Run Code Online (Sandbox Code Playgroud)

但我相信有更有效的方法来删除空字符串。

Mil*_*ani 6

new_li = filter((i) -> i != " ", li)
Run Code Online (Sandbox Code Playgroud)

或者

new_li = [i for i in li if i != " "]
Run Code Online (Sandbox Code Playgroud)

  • `过滤器(!=(" "), li)` (3认同)

DNF*_*DNF 6

我有一些评论对于评论字段来说有点太长了:

首先,在构建数组时,切勿像这样启动它:

new_li = []
Run Code Online (Sandbox Code Playgroud)

它会创建一个Vector{Any},这可能会损害性能。如果你想初始化一个字符串向量,最好写

new_li = String[]
Run Code Online (Sandbox Code Playgroud)

其次," "不是空字符串!看这里:

jl> isempty(" ")
false
Run Code Online (Sandbox Code Playgroud)

它是一个包含空格的非空字符串。空字符串就是"",没有空格。如果您实际上想删除空字符串,您可以这样做

filter(!isempty, li)
Run Code Online (Sandbox Code Playgroud)

或者,对于就地操作,您可以使用filter!:

filter!(!isempty, li)
Run Code Online (Sandbox Code Playgroud)

但您实际上并不是删除空字符串,而是删除由一个(或多个?)空格组成的字符串,也许实际上也是空字符串?在这种情况下,您可以isspace与 一起使用all。这将删除所有仅是空格的字符串,包括空字符串:

jl> li = ["one", "", "two", "three", " ", "four", "   ", "five"];

jl> filter(s->!all(isspace, s), li)
5-element Vector{String}:
 "one"
 "two"
 "three"
 "four"
 "five"
Run Code Online (Sandbox Code Playgroud)