为什么我必须将数字转换为字符串才能获得其位置?

时间:2013-03-01 17:21:00

标签: python

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

x = 123
print x[0] # error

为了解决这个问题,我必须这样做

x = 123
print str(x)[0]

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

4 个答案:

答案 0 :(得分:4)

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

  • 1因为它的十进制表示吗?
  • 7因为它的十六进制表示(7B)吗?
  • 0因为它的十六进制表示(0x7B)吗?
  • 1,因为它是八进制表示(173)?
  • 0,因为它是八进制表示(0173)?
  • 1,因为它的二进制表示形式(1111011
  • 1,因为它的二进制表示首先是最低有效位(1101111)?
  • S,因为这是123在ASCII中的含义吗?
  • ...

正如你所看到的,这是非常不清楚的,开始时没有意义。在列表上使用索引访问时,您将获得列表的第n个元素。在序列上使用索引访问时,将获得序列的第n个元素。字符串是一系列字符,因此在字符串上使用索引访问时,您将获得字符串序列的第n个元素;第n个角色。数字不是序列,只有它的某种格式的字符串表示是。

答案 1 :(得分:3)

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

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

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

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

print x  # prints the number 1

请注意,x会保留int个字符串,而不是单个字符的字符串。

答案 2 :(得分:1)

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

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

>>> 0x7b == 123
True

因此,在这种情况下,谁应该说x[0]应该返回1而不是0(或7),具体取决于您想要的方式?

答案 3 :(得分: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