为什么Python中的Map和Str不能有前导零

1 投票
4 回答
8031 浏览
提问于 2025-04-15 14:59

为什么在把数字转换成序列时,数字开头不能用零?

代码示例

map(int,str(08978789787))

这样会导致 语法错误

我想把以零开头的数字转换成序列。那我该怎么做才能把这样的数字转换成序列呢?

4 个回答

4

Python: 无效的标记

使用:

map(int,"08978789787")
9

“整数前面加0表示这是八进制”这个说法很奇怪,最早是在C语言中出现的,后来在很多地方都流行开来,比如Python(1.*和2.*版本)、Perl、Ruby、Java等等。不过,Python 3已经取消了这个规则,任何整数前面都不能加0(除了在0x0b0o这些情况下,分别表示十六进制、二进制和八进制)。

即使在一个假设的合理语言中,整数前面加0有它正常的数学意义,也就是没有任何特别的意思,01111其实是完全一样的。所以,不管你对哪个调用str,结果都是一样的——都是长度为2的字符串'11'

在算术中,十进制表示的01111是完全相同的,没法区分的。没有哪个假设的合理语言会完全改变算术的规则,因为那样的话,你想要的结果就无法实现了。

所以,大家都说了,直接用字符串就行了——为什么不呢?

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]

撰写回答