为什么Python中的Map和Str不能有前导零
为什么在把数字转换成序列时,数字开头不能用零?
代码示例
map(int,str(08978789787))
这样会导致 语法错误
。
我想把以零开头的数字转换成序列。那我该怎么做才能把这样的数字转换成序列呢?
4 个回答
4
9
“整数前面加0表示这是八进制”这个说法很奇怪,最早是在C语言中出现的,后来在很多地方都流行开来,比如Python(1.*和2.*版本)、Perl、Ruby、Java等等。不过,Python 3已经取消了这个规则,任何整数前面都不能加0(除了在0x
、0b
、0o
这些情况下,分别表示十六进制、二进制和八进制)。
即使在一个假设的合理语言中,整数前面加0
有它正常的数学意义,也就是没有任何特别的意思,011
和11
其实是完全一样的。所以,不管你对哪个调用str
,结果都是一样的——都是长度为2的字符串'11'
。
在算术中,十进制表示的011
和11
是完全相同的,没法区分的。没有哪个假设的合理语言会完全改变算术的规则,因为那样的话,你想要的结果就无法实现了。
所以,大家都说了,直接用字符串就行了——为什么不呢?
14
这个问题出现是因为前面的零表示你在写一个八进制数字,而八进制数字里不能有9或8。看看这个:
>>> a = 0123
>>> a
83
>>> a = 010
>>> a
8
你可以直接这样做:
>>> map(int, '08978789787')
[0, 8, 9, 7, 8, 7, 8, 9, 7, 8, 7]