为什么在我将其转换为字符串之前它不会打印出整数/浮点数的位置?例子
x = 123
print x[0] # error
要解决这个问题,我必须做
x = 123
print str(x)[0]
但是为什么我必须把它变成一个字符串才能工作呢?
为什么在我将其转换为字符串之前它不会打印出整数/浮点数的位置?例子
x = 123
print x[0] # error
要解决这个问题,我必须做
x = 123
print str(x)[0]
但是为什么我必须把它变成一个字符串才能工作呢?
那么,为什么这首先应该起作用?一个数的第 n 个索引是多少;十进制数 123 的索引 0 是什么?
1
因为它的十进制表示吗?7
因为它的十六进制表示(7B
)吗?0
因为它的十六进制表示(0x7B
)吗?1
因为它的八进制表示(173
)吗?0
因为它的八进制表示(0173
)吗?1
因为它的二进制表示 ( 1111011
)1
因为它的二进制表示是最低有效位在前(1101111
)?S
因为那123
是ASCII中的内容吗?如您所见,这是非常不清楚的,并且从一开始就没有意义。在列表上使用索引访问时,您将获得列表的第 n 个元素。当您对序列使用索引访问时,您将获得序列的第 n 个元素。字符串是一个字符序列,因此在对字符串使用索引访问时,会得到字符串序列的第 n 个元素;第 n 个字符。数字不是序列,只有某种格式的字符串表示才是。
123 只是整数值的一种表示。Pythonint
值不是序列或映射,因此[item]
索引对它们没有意义。
通过将数字转换为字符串,您可以将表示“捕获”为一系列数字字符,然后您可以获得第一个字符。
另一种方法是除以 10,直到你的数字小于 10:
x = 123
while x > 10:
x //= 10
print x # prints the number 1
请注意,x
then 包含一个int
静止的,而不是单个字符串。
简单的答案是因为你有错误的类型。整数不支持索引——我真的认为它们不应该(它们不是序列或映射,我想不出索引整数实际上有意义的任何方式)。
请注意,表示整数的方法也不止一种:
>>> 0x7b == 123
True
那么在这种情况下,谁说x[0]
应该返回1
而不是0
(或7
)取决于您的想法?
作为上述出色答案的旁注,这是您可以将数字转换为数字列表以允许索引的一种方法:
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