2009-10-10 51 views
1

将数字转换为序列时,您不能在数字的开头使用零的原因是什么?为什么在Python的Map和Str中不能引用零

代码示例

map(int,str(08978789787)) 

其给出Syntax error

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

+3

我对Python并不熟悉,但我猜测089 ...被视为八进制值,因为它包含9而被视为八进制值。你不能简单地做map(int,'08978789787')吗? – schnaader 2009-10-10 16:42:01

+0

@schnaader:我现在没有9个号码,但同样的问题发生,所以这表明我的号码不是八进制数。 - 然后,map(int,'03049340930493')似乎工作。 – 2009-10-10 17:10:48

+1

8也不允许用八进制数字表示,就像你不能用十进制表示十位一样。 – 2009-10-10 17:17:28

回答

13

什么,因为前导零意味着你正在编写一个八进制数,你不能有9或8的八进制数。请参阅:

>>> a =
>>> a 
83 
>>> a = 010 
>>> a 
8 

你可以这样做:

>>> map(int, '08978789787') 
[0, 8, 9, 7, 8, 7, 8, 9, 7, 8, 7] 
4

Python: Invalid Token

用途:

map(int,"08978789787") 
+0

+1:前导零是八进制。八进制不能包含数字8或9. – 2009-10-10 16:43:24

8

的“一个整数0领先意味着它的八进制” Meme是一个很特殊的一个起源于C和遍布的地方 - - Python(1. *和2. *),Perl,Ruby,Java ... Python 3已经通过在所有整数中使前导0不合法(除了在构造0x,0b,0o中指示十六进制,二进制和八进制符号)。

然而,即使是在一个假设的合理的语言,其中一个int领先0有其正常的算术意义,那就是,没有任何意义,你还是不会得到你想要的结果:011然后将完全相同11,所以在其中任何一个上调用str都必须产生相同的结果 - 长度为2的字符串'11'

在算术运算中,用十进制表示法011表示的整数是完全相同的实体,与用十进制表示法表示的整数11完全相同,与它们之间没有区别。没有任何假设的合理语言会完全改变算术规则,因为这会让你获得你所期望的结果。

因此,像其他人一样,直接使用字符串 - 为什么不呢,毕竟?!

+0

因为他正试图理解sum(map(int,str(i))是如何工作的,他还有另一个问题,无论如何... – 2009-10-10 17:51:17

+3

IOW - 表示的数字(源代码中的数字字符序列或输出中的数字字符序列)与抽象数字或语言使用的内部表示形式不同,Python(与大多数语言一样)有一个使用二进制的内部表示法,设计为适合机器寄存器的块,并且不保存诸如十进制表示中多少前导零的信息 – Steve314 2009-10-10 18:41:08

+0

@ Steve314,优秀的替代视点/表示 – 2009-10-10 19:38:11

2

“你怎么能把这样的数字转换成序列?”

没有“这样的数字”。数字1不是以0开始。数字不是以0开始的(如果他们这样做,每次写入数字时都需要写入无限数量的零,而这显然是不可能的)。

所以,这个问题归结于你为什么写str(08978789787)?如果你想要字符串'08978789787',你应该合理地写字符串'08978789787'。将它写成一个数字并将其转换为字符串是毫无意义的。

+0

你说“没有这样的数字“,但是数字是表示的一部分,而不是数字本身,数字是抽象的,在现实世界中你永远不会看到数字11,尽管你可能会看到11个苹果s或11个桔子或十进制表示“11”或“00000011”或二进制表示“1011”或单词“eleven”或符号“XI”等。这就像“狗”这个词是不一样的狗本身,尽管至少真正的狗是真实的,不像数字 - 这取决于你的意思*真实*数量,当然;-) – Steve314 2009-10-10 18:59:26

+0

是的。表示“11”与“011”不是一个不同的数字,在这两种情况下都是数字11。所以没有011号,只有11号。因此,想知道如何使用数字zeroeleven,这是没有道理的,也就是他要求的。 – 2009-10-10 19:32:00

+0

我没有说你错了 - 只是评论你的解释。我的观点是,你不能声称011不存在,只是因为它不是你最喜欢的代表。没有一个真正的代表。前导零是多余的,但*不*无效。在Python数字文字中它是不同的 - 具有前导零的表示具有不同的含义。尽管如此,01和011等仍然存在,只是它们分别表示与小数1和9相同的值。 – Steve314 2009-10-11 00:53:03

相关问题