循环遍历Julia意外行为中的数字的字符串表示

时间:2014-11-14 03:23:59

标签: julia ijulia-notebook

我正在尝试理解int("0") > 0false评估为all([int(i) > 0 for i in "0"])true评估为[all(i != "0" for i in "0"]的原因。有趣的是,true也会评估为{{1}}。

如何正确评估列表理解,即捕获“0”?

1 个答案:

答案 0 :(得分:2)

使用不同类型调用

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