在 Julia 中是否有一种优雅的方式来“不进入”?

log*_*ick 16 julia

我正在尝试将 python 脚本转换为 Julia。我正在检查以确保我以最佳方式执行此代码。请看以下代码:

julia> a = [1,2,3,4,5]
5-element Array{Int64,1}:
 1
 2
 3
 4
 5

julia> if 1 in a
           print("1 is in a")
       end
1 is in a
julia> if 6 not in a
           print("6 not in a")
       end
ERROR: TypeError: non-boolean (Int64) used in boolean context
Stacktrace:
 [1] top-level scope at REPL[6]:1

julia> push!(a, 6)
6-element Array{Int64,1}:
 1
 2
 3
 4
 5
 6
julia> if (6 in a) == true
           print("6 in a")
       end
6 not in a
julia> b = [1]
1-element Array{Int64,1}:
 1

julia> if (6 in b) == true
           print("6 in b")
       end


Run Code Online (Sandbox Code Playgroud)

我是否正确地进行了“不在”检查?

Cam*_*nek 22

julia> a = [1, 2, 3, 4, 5];

julia> 6 ? a
true
Run Code Online (Sandbox Code Playgroud)

?标志可以通过键入REPL键入\notin,然后按Tab。当然,?也可以in通过键入\in并按 TAB来替代该符号:

julia> 6 ? a
false
Run Code Online (Sandbox Code Playgroud)

有时您需要矢量化版本:

julia> x = [2, 7];

julia> x .? Ref(a)
2-element BitArray{1}:
 0
 1
Run Code Online (Sandbox Code Playgroud)

Ref需要在该情况下,使a作为在广播操作的标量处理。

编辑:

正如@SalchiPapa 和@DNF 在评论中所指出的,!(6 in a)如果您希望避免使用 Unicode 字符,您可以这样做。

  • 有时显示 Unicode 会是一个问题,根据您的设置,您也可以像这样否定整个表达式:`x = [1, 2, 3]; 2 in x, !(2 in x) # (true, false)` (7认同)
  • 有一个未解决的问题,要求在中缀运算符前面使用 `!`:https://github.com/JuliaLang/julia/issues/25512 在这种情况下,您可以编写 `6 !in a`。不过,它似乎不会去任何地方。目前,我认为最好使用`!(6 in a)`。 (3认同)