数値をシーケンスに変換するときに、数値の先頭にゼロを使用できない理由は何ですか?
コード例
map(int,str(08978789787))
これはを与えSyntax error
ます。
先頭の桁がゼロの数字をシーケンスに変換したいのですが。 このような数値をシーケンスに変換するにはどうすればよいですか?
これは、先行ゼロが8進数を書き込んでいることを意味し、8進数に9または8を含めることができないために発生します。見る:
>>> a = 0123
>>> a
83
>>> a = 010
>>> a
8
あなたはただすることができます:
>>> map(int, '08978789787')
[0, 8, 9, 7, 8, 7, 8, 9, 7, 8, 7]
「整数の先行0は、8進表記であることを意味します」ミームは、Cで始まり、Python(1.*および2.*)、Perl、Ruby、Java...Pythonなどのあらゆる場所に広がった独特のミームです。 3は、すべての整数で先行0を無効にすることでこれを排除しました(16進、2進、および8進表記を示す構文0x
、、0b
を除く)。0o
0
それにもかかわらず、 intの先頭が通常の算術的意味を持っている、つまり、まったく意味がないという架空の賢明な言語でも、目的の結果は得られません。その011
場合、とまったく同じになるので、どちらかを11
呼び出すと、str
同じ結果を生成する必要があります-長さ2の文字列、'11'
。
算術では、10進表記で示される整数011
は同一であり、10進表記で示される整数とまったく同じエンティティであり、区別できません11
。あなたが望むように見える結果を得ることができるようにするために必要とされるように、仮想の賢明な言語が算術の規則を完全に変えることはありません。
だから、他のみんなが言ったように、文字列を直接使用してください-結局のところ、なぜですか?!
「どうすればそのような数をシーケンスに変換できますか?」
「そのような数」はありません。数値1は0で始まりません。数値は一般にゼロで始まりません(もしそうなら、数値を書くたびに無限の量のゼロを書く必要があり、それは明らかに不可能です)。
So the question boils down to why you are writing str(08978789787)
? If you want the string '08978789787'
, you should reasonably just write the string '08978789787'
. Writing it as a number and the converting it to a string is completely pointless.