簡體   English   中英

為什么必須將數字轉換為字符串才能獲得其位置?

[英]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嗎?
  • 是因為它的十六進制表示形式77B )?
  • 是否由於其十六進制表示形式( 0x7B )而為0
  • 1是因為它的八進制表示( 173 )?
  • 是否由於其八進制表示( 0173 )而為0
  • 由於其二進制表示形式而為11111011
  • 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM