在Julia中,有一种优雅的方法可以实现“not in”吗?

33

我正在努力将一个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


我对这个“not in”检查的操作是否正确?

1个回答

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

julia> 6 ∉ a
true

在 REPL 中,可以通过键入 \notin 并按下 TAB 键来输入符号 。当然,也可以通过键入 \in 并按下 TAB 键来使用符号 作为 in 的替代:

julia> 6 ∈ a
false
有时候您需要一个矢量化版本:
julia> x = [2, 7];

julia> x .∉ Ref(a)
2-element BitArray{1}:
 0
 1

在这种情况下需要使用Ref,以便于将a视为广播操作中的标量。

如果您想避免Unicode字符,可以将6 ∉ a写成!(6 in a)


8
有时显示Unicode可能会有问题,具体取决于你的设置,你也可以像这样否定整个表达式:x = [1, 2, 3]; 2 in x, !(2 in x) # (true, false) - HarmonicaMuse
4
有一个开放问题要求在中缀运算符前使用!: https://github.com/JuliaLang/julia/issues/25512。在这种情况下,您可以编写`6 !in a。尽管如此,它似乎没有得到进展。现在,最好使用!(6 in a)`。 - DNF

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接