为什么在将它转换为字符串之前不会打印出整数/浮点数的位置? 示例
x = 123
print x[0] # error
为了解决这个问题,我必须这样做
x = 123
print str(x)[0]
但为什么我必须把它变成一个字符串才能使它工作?
答案 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