我试图理解为什么int("0") > 0
评估为false
而all([int(i) > 0 for i in "0"])
评估为true
。有趣的是,[all(i != "0" for i in "0"]
也评估为true
。
我怎样才能让我的列表理解正确评估,即抓住“0”?
我试图理解为什么int("0") > 0
评估为false
而all([int(i) > 0 for i in "0"])
评估为true
。有趣的是,[all(i != "0" for i in "0"]
也评估为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
当给定 a 时Char
,Juliaint
更像 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