我正在尝试理解int("0") > 0
在false
评估为all([int(i) > 0 for i in "0"])
时true
评估为[all(i != "0" for i in "0"]
的原因。有趣的是,true
也会评估为{{1}}。
如何正确评估列表理解,即捕获“0”?
答案 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