1

我试图理解为什么int("0") > 0评估为falseall([int(i) > 0 for i in "0"])评估为true。有趣的是,[all(i != "0" for i in "0"]也评估为true

我怎样才能让我的列表理解正确评估,即抓住“0”?

4

1 回答 1

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

当给定 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
于 2014-11-14T04:56:13.957 回答