为什么在Python的Map和Str中不可能导致零

时间:2009-10-10 16:39:38

标签: python string sequence

将数字转换为序列时,在数字开头不能使用零的原因是什么?

代码示例

map(int,str(08978789787))

给出了Syntax error

我想将前导数字为零的数字转换为序列。 如何将这样的数字转换为序列?

4 个答案:

答案 0 :(得分: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]

答案 1 :(得分:9)

“整数中的前导0表示它是八进制表示法”meme是一个奇特的,它起源于C并遍布各处--Python(1. *和2. *),Perl,Ruby,Java。 .. Python 3通过在所有整数中使前导0非法来消除它(除了在构造0x0b0o中指示十六进制,二进制和八进制表示法。

然而,即使在假设的合理语言中,int中的前导0具有正常的算术意义,即没有任何意义,你仍然无法获得所需的结果:011然后完全相同11,因此在其中任何一个上调用str都必须产生相同的结果 - 长度为2的字符串'11'。< / p>

在算术中,十进制表示法011表示的整数是完全相同的,与十进制表示法11表示的整数完全相同的实体,无法区分。没有任何假设的合理语言会完全改变算术规则,因为这样可以让你获得你想要的结果。

所以,就像其他人说的那样,只需直接使用字符串 - 毕竟为什么不呢?!

答案 2 :(得分:4)

Python: Invalid Token

使用:

map(int,"08978789787")

答案 3 :(得分:2)

“你如何将这样的数字转换为序列?”

没有“这样的数字”。数字1不以0开头。数字一般不以零开头(如果有的话,每次写一个数字时都需要写入无限量的零,这显然是不可能的)。

所以问题归结为你写str(08978789787)的原因?如果你想要字符串'08978789787',你应该合理地写出字符串'08978789787'。将它写成数字并将其转换为字符串是完全没有意义的。