在Julia意外行为中数字的字符串表示上循环
我试图理解为什么在Julia意外行为中数字的字符串表示上循环,julia,ijulia-notebook,Julia,Ijulia Notebook,我试图理解为什么int(“0”)>0的计算结果为false,而all([int(I)>0表示“0”中的I)的计算结果为true。有趣的是,[all(i!=“0”表示“0”中的i)]也计算为true 如何让我的列表理解正确计算,即捕捉“0”int被不同类型调用,因为迭代字符串会得到Char对象,而不是长度为1的字符串: julia> typeof("0") ASCIIString (constructor with 2 methods) julia> [typeof(x) for x
int(“0”)>0
的计算结果为false
,而all([int(I)>0表示“0”中的I)
的计算结果为true
。有趣的是,[all(i!=“0”表示“0”中的i)]
也计算为true
如何让我的列表理解正确计算,即捕捉“0”
int
被不同类型调用,因为迭代字符串会得到Char
对象,而不是长度为1的字符串:
julia> typeof("0")
ASCIIString (constructor with 2 methods)
julia> [typeof(x) for x in "0"]
1-element Array{Type{Char},1}:
Char
当给定一个Char
时,Julia的int
更像Python的ord
:
julia> int("0")
0
julia> int("0"[1])
48
这就产生了你所看到的:
julia> [int(i) for i in "0"]
1-element Array{Int32,1}:
48
julia> [int(i) > 0 for i in "0"]
1-element Array{Bool,1}:
true
julia> all([int(i) > 0 for i in "0"])
true
有很多方法可以使其按预期运行,例如使用parseint
或简单地转换回字符串:
julia> [parseint(i) for i in "0"]
1-element Array{Int32,1}:
0
julia> [int(string(i)) for i in "0"]
1-element Array{Int32,1}:
0