将数字转换为序列时,您不能在数字的开头使用零的原因是什么?为什么在Python的Map和Str中不能引用零
代码示例
map(int,str(08978789787))
其给出Syntax error
。
我想将前导数字为零的数字转换为序列。 如何将这样的数字转换为序列?
将数字转换为序列时,您不能在数字的开头使用零的原因是什么?为什么在Python的Map和Str中不能引用零
代码示例
map(int,str(08978789787))
其给出Syntax error
。
我想将前导数字为零的数字转换为序列。 如何将这样的数字转换为序列?
什么,因为前导零意味着你正在编写一个八进制数,你不能有9或8的八进制数。请参阅:
>>> a =
>>> a
83
>>> a = 010
>>> a
8
你可以这样做:
>>> map(int, '08978789787')
[0, 8, 9, 7, 8, 7, 8, 9, 7, 8, 7]
的“一个整数0领先意味着它的八进制” Meme是一个很特殊的一个起源于C和遍布的地方 - - Python(1. *和2. *),Perl,Ruby,Java ... Python 3已经通过在所有整数中使前导0不合法(除了在构造0x
,0b
,0o
中指示十六进制,二进制和八进制符号)。
然而,即使是在一个假设的合理的语言,其中一个int领先0
有其正常的算术意义,那就是,没有任何意义,你还是不会得到你想要的结果:011
然后将完全相同到11
,所以在其中任何一个上调用str
都必须产生相同的结果 - 长度为2的字符串'11'
。
在算术运算中,用十进制表示法011
表示的整数是完全相同的实体,与用十进制表示法表示的整数11
完全相同,与它们之间没有区别。没有任何假设的合理语言会完全改变算术规则,因为这会让你获得你所期望的结果。
因此,像其他人一样,直接使用字符串 - 为什么不呢,毕竟?!
因为他正试图理解sum(map(int,str(i))是如何工作的,他还有另一个问题,无论如何... – 2009-10-10 17:51:17
IOW - 表示的数字(源代码中的数字字符序列或输出中的数字字符序列)与抽象数字或语言使用的内部表示形式不同,Python(与大多数语言一样)有一个使用二进制的内部表示法,设计为适合机器寄存器的块,并且不保存诸如十进制表示中多少前导零的信息 – Steve314 2009-10-10 18:41:08
@ Steve314,优秀的替代视点/表示 – 2009-10-10 19:38:11
“你怎么能把这样的数字转换成序列?”
没有“这样的数字”。数字1不是以0开始。数字不是以0开始的(如果他们这样做,每次写入数字时都需要写入无限数量的零,而这显然是不可能的)。
所以,这个问题归结于你为什么写str(08978789787)
?如果你想要字符串'08978789787'
,你应该合理地写字符串'08978789787'
。将它写成一个数字并将其转换为字符串是毫无意义的。
你说“没有这样的数字“,但是数字是表示的一部分,而不是数字本身,数字是抽象的,在现实世界中你永远不会看到数字11,尽管你可能会看到11个苹果s或11个桔子或十进制表示“11”或“00000011”或二进制表示“1011”或单词“eleven”或符号“XI”等。这就像“狗”这个词是不一样的狗本身,尽管至少真正的狗是真实的,不像数字 - 这取决于你的意思*真实*数量,当然;-) – Steve314 2009-10-10 18:59:26
是的。表示“11”与“011”不是一个不同的数字,在这两种情况下都是数字11。所以没有011号,只有11号。因此,想知道如何使用数字zeroeleven,这是没有道理的,也就是他要求的。 – 2009-10-10 19:32:00
我没有说你错了 - 只是评论你的解释。我的观点是,你不能声称011不存在,只是因为它不是你最喜欢的代表。没有一个真正的代表。前导零是多余的,但*不*无效。在Python数字文字中它是不同的 - 具有前导零的表示具有不同的含义。尽管如此,01和011等仍然存在,只是它们分别表示与小数1和9相同的值。 – Steve314 2009-10-11 00:53:03
我对Python并不熟悉,但我猜测089 ...被视为八进制值,因为它包含9而被视为八进制值。你不能简单地做map(int,'08978789787')吗? – schnaader 2009-10-10 16:42:01
@schnaader:我现在没有9个号码,但同样的问题发生,所以这表明我的号码不是八进制数。 - 然后,map(int,'03049340930493')似乎工作。 – 2009-10-10 17:10:48
8也不允许用八进制数字表示,就像你不能用十进制表示十位一样。 – 2009-10-10 17:17:28