将数字转换为序列时,在数字开头不能使用零的原因是什么?
代码示例
map(int,str(08978789787))
给出了Syntax error
。
我想将前导数字为零的数字转换为序列。 如何将这样的数字转换为序列?
答案 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非法来消除它(除了在构造0x
,0b
,0o
中指示十六进制,二进制和八进制表示法。
然而,即使在假设的合理语言中,int中的前导0
具有正常的算术意义,即没有任何意义,你仍然无法获得所需的结果:011
然后完全相同到11
,因此在其中任何一个上调用str
都必须产生相同的结果 - 长度为2的字符串'11'
。< / p>
在算术中,十进制表示法011
表示的整数是完全相同的,与十进制表示法11
表示的整数完全相同的实体,无法区分。没有任何假设的合理语言会完全改变算术规则,因为这样可以让你获得你想要的结果。
所以,就像其他人说的那样,只需直接使用字符串 - 毕竟为什么不呢?!
答案 2 :(得分:4)
答案 3 :(得分:2)
“你如何将这样的数字转换为序列?”
没有“这样的数字”。数字1不以0开头。数字一般不以零开头(如果有的话,每次写一个数字时都需要写入无限量的零,这显然是不可能的)。
所以问题归结为你写str(08978789787)
的原因?如果你想要字符串'08978789787'
,你应该合理地写出字符串'08978789787'
。将它写成数字并将其转换为字符串是完全没有意义的。