我正在寻找有效的解决方案来删除 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)
但我相信有更有效的方法来删除空字符串。
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)
我有一些评论对于评论字段来说有点太长了:
首先,在构建数组时,切勿像这样启动它:
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)