2015-01-20 189 views

回答

6

的一種方式是第一轉數成字符串,然後將每個字符數字映射回的整數:

>>> map(int, str(123456789)) 
[1, 2, 3, 4, 5, 6, 7, 8, 9] 

這將執行以下操作:

  • str接通整數成字符串:'123456789'

  • map將函數int應用於每個字符呃依次在這個字符串中,將每個字符串變成一個整數值。

  • 返回這些整數的列表。

+0

當使用你的方法,我得到一個錯誤說「類型錯誤:‘海峽’對象不是可調用的」 – phighter 2015-01-20 23:19:38

+1

嗯...這聽起來像你可能已經在某個階段覆蓋了內建功能。你有沒有寫過將任何函數分配給字符串,例如'int ='number''? – 2015-01-20 23:24:20

+0

@ajcr似乎更可能他已經重新分配了'str'。 phighter可以通過打印出來進行檢查:'print(str)'應該給出'','print(int)'應該給出''。 – jpmc26 2015-01-20 23:27:41

2

您可以將數字轉換成字符串,然後做一個列表理解 -

>>>[int(digit) for digit in str(123456789)] 
[1, 2, 3, 4, 5, 6, 7, 8, 9] 
0

使用內置list功能在Python以下列方式:

a = 123456789 
p = str(a) 
li = list(p) 
s = [] 
for e in li: 
    a = int(e) 
    s.append(a) 
print s  

從文檔:

list(iterable) -> new list initialized from iterable's items 

編輯:

由於list()方法返回只包含字符串元素的列表,我已經創建了一個空列表s,並然後使用一個for循環通過每個字符串元素來迭代,轉換每個這些元素的整數,然後將這些元素添加到空列表s中。

+0

以及如果OP想要一個'int'列表會怎麼樣? – Bolboa 2015-01-20 23:22:17

4

你也可以做到這一點沒有把你的號碼轉換爲字符串,像這樣:

def splitNum(n): 
    if n < 10 
     return [n] 
    else: 
     return splitNum(n // 10) + [n % 10] 

此方法使用遞歸,但你也可以做到這一點沒有遞歸

def splitNum(n): 
    digits = [] 
    while n > 0: 
     digits.insert(0, n % 10) # add ones digit to front of digits 
     n = n // 10 
    return digits 

都使用以下事實:

  • x // 10,由於整數除法,「斬斷」的個位,即1234 // 10123
  • x % 10是個位數字,即1234 % 104
+0

注意:這隻適用於沒有**'from __future__ import division'的**。如果啓用了該功能,則需要使用「//」運算符進行整數截斷。 – jpmc26 2015-01-20 23:24:44

+0

道歉。忘了Python 3.x,它也適用於它。有趣的是,從其他評論來看,它看起來像3.x正是OP所使用的。 – jpmc26 2015-01-20 23:39:02

相關問題