0

为什么在我将其转换为字符串之前它不会打印出整数/浮点数的位置?例子

x = 123
print x[0] # error

要解决这个问题,我必须做

x = 123
print str(x)[0]

但是为什么我必须把它变成一个字符串才能工作呢?

4

4 回答 4

4

那么,为什么这首先应该起作用?一个数的第 n 个索引是多少;十进制数 123 的索引 0 是什么?

  • 1因为它的十进制表示吗?
  • 7因为它的十六进制表示(7B)吗?
  • 0因为它的十六进制表示(0x7B)吗?
  • 1因为它的八进制表示(173)吗?
  • 0因为它的八进制表示(0173)吗?
  • 是不是1因为它的二进制表示 ( 1111011)
  • 1因为它的二进制表示是最低有效位在前(1101111)?
  • S因为那123是ASCII中的内容吗?
  • …</li>

如您所见,这是非常不清楚的,并且从一开始就没有意义。在列表上使用索引访问时,您将获得列表的第 n 个元素。当您对序列使用索引访问时,您将获得序列的第 n 个元素。字符串是一个字符序列,因此在对字符串使用索引访问时,会得到字符串序列的第 n 个元素;第 n 个字符。数字不是序列,只有某种格式的字符串表示才是。

于 2013-03-01T17:27:29.743 回答
3

123 只是整数值的一种表示。Pythonint值不是序列或映射,因此[item]索引对它们没有意义。

通过将数字转换为字符串,您可以将表示“捕获”为一系列数字字符,然后您可以获得第一个字符。

另一种方法是除以 10,直到你的数字小于 10:

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

print x  # prints the number 1

请注意,xthen 包含一个int静止的,而不是单个字符串。

于 2013-03-01T17:29:56.180 回答
1

简单的答案是因为你有错误的类型。整数不支持索引——我真的认为它们不应该(它们不是序列或映射,我想不出索引整数实际上有意义的任何方式)。

请注意,表示整数的方法也不止一种:

>>> 0x7b == 123
True

那么在这种情况下,谁说x[0]应该返回1而不是0(或7)取决于您的想法?

于 2013-03-01T17:26:38.537 回答
0

作为上述出色答案的旁注,这是您可以将数字转换为数字列表以允许索引的一种方法:

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 回答