0

文字列に変換するまで整数/浮動小数点の位置を出力しないのはなぜですか?例

x = 123
print x[0] # error

これを修正するには、私がしなければなりません

x = 123
print str(x)[0]

しかし、なぜそれを機能させるために文字列にする必要があるのですか?

4

4 に答える 4

4

そもそも、なぜこれが機能するのでしょうか。数値の n 番目のインデックスは何ですか。10進数123のインデックス0は何ですか?

  • 110進数表現のためですか?
  • 716進数表記(7B)のせいでしょうか?
  • 016進数表記(0x7B)のせいでしょうか?
  • 18進数表現( )のためですか173
  • 08進数表現( )のためですか0173
  • 1バイナリ表現のためですか( 1111011
  • 1最下位ビットが最初のバイナリ表現 ( 1101111)のためですか?
  • それがASCIIにSあるからですか?123
  • …</li>

ご覧のとおり、これは非常に不明確であり、そもそも意味がありません。リストでインデックス アクセスを使用すると、リストの n 番目の要素が取得されます。シーケンスでインデックス アクセスを使用すると、シーケンスの n 番目の要素が取得されます。文字列は一連の文字であるため、文字列に対してインデックス アクセスを使用すると、文字列シーケンスの n 番目の要素が取得されます。n 番目の文字。数値はシーケンスではなく、何らかの形式での文字列表現のみです。

于 2013-03-01T17:27:29.743 に答える
3

123 は、整数値の1 つの表現にすぎません。Pythonintの値はシーケンスやマッピングではないため、[item]インデックス付けは意味を持ちません。

数値を文字列に変換することで、表現を一連の数字文字に「キャプチャ」し、最初の文字を取得できます。

それを行う別の方法は、10 未満の数になるまで 10 で割ることです。

x = 123
while x > 10:
    x //= 10

print x  # prints the number 1

その後、1 文字の文字列ではなく静止画xを保持することに注意してください。int

于 2013-03-01T17:29:56.180 に答える
1

簡単な答えは、タイプが間違っているからです。整数はインデックス付けをサポートしていません - そして私はそうすべきだとは本当に思いません (それらはシーケンスやマッピングではなく、整数のインデックス付けが実際に意味をなす方法は考えられません)。

整数を表す方法も複数あることに注意してください。

>>> 0x7b == 123
True

したがって、この場合、あなたがそれをどのように考えたいかによって、 (または)の代わりにそれx[0]が返されるべきだと誰が言いますか?107

于 2013-03-01T17:26:38.537 に答える
0

上記の優れた回答の補足として、これは、数値を数値のリストに変換してインデックス付けを可能にする1つの方法です。

In [2]: map(int,str(123))
Out[2]: [1, 2, 3]

In [3]: map(int,str(123))[0]
Out[3]: 1

In [4]: type(map(int,str(123))[0])
Out[4]: int
于 2013-03-01T17:31:33.073 に答える