[英]Why do I have to convert numbers into strings to get its location?
在將其轉換為字符串之前,為什么不打印出整數/浮點數的位置? 例
x = 123
print x[0] # error
要解決這個問題,我必須做
x = 123
print str(x)[0]
但是,為什么必須將它變成字符串才能起作用?
好吧,為什么這首先應該起作用? 數字的第n個索引是多少? 十進制數字123的索引0是什么?
1
嗎? 7
( 7B
)? 0x7B
)而為0
? 1
是因為它的八進制表示( 173
)? 0173
)而為0
? 1
( 1111011
) 1
是因為其二進制表示形式是最低有效位在前( 1101111
)? S
是因為ASCII中的123
是什么? 如您所見,這是非常不清楚的,並且從一開始就沒有任何意義。 在列表上使用索引訪問時,將獲得列表的第n個元素。 在序列上使用索引訪問時,將獲得序列的第n個元素。 字符串是一個字符序列,因此在對字符串使用索引訪問時,將獲得字符串序列的第n個元素。 第n個字符。 數字不是序列,只是其字符串以某種格式表示。
123只是整數值的一種表示形式 。 Python int
值不是序列或映射,因此[item]
索引對其沒有任何意義。
通過將數字轉換為字符串,可以將表示形式“捕獲”為一系列數字字符,然后可以獲取第一個數字字符。
另一種方法是除以10,直到數字小於10:
x = 123
while x > 10:
x //= 10
print x # prints the number 1
請注意, x
隨后將保持一個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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.