HOWTO · Python
在 Python 中將整數拆分為數字
本教程演示如何在 python 中將整數拆分為數字
本頁內容
若要將整數拆成由左至右排列的數字清單,可先將它轉成字串,再用 int() 將每個字元轉回整數。處理負整數時,應將負號另外處理,並拆分其絕對值;零則表示為 [0]。若不適合先轉成字串,可使用整數算術;若輸入已是以空白分隔的數字字串,則可使用 map() 和 str.split()。
在 Python 中使用列表推導式將整數拆分為各位數字
當輸入是整數,而你想取得依一般順序由左至右排列的數字清單時,列表推導式是最直接的選擇。str() 會讓每個十進位數字成為一個字元,而 int() 則會將每個字元轉成整數。
num = 13579
digits = [int(character) for character in str(num)]
print(digits)
程式碼會將 13579 的各位數字轉成整數元素。輸入為零時,相同的運算式會得到 [0]。輸入為負數時,可拆分 abs(num);若應用程式需要保留正負資訊,請將符號存放在另一個變數中。整數不會保留前導零;如果前導零很重要,請改用原始文字。
用整數算術將整數拆分為各位數字
若要避免將數值轉成文字,可反覆使用 divmod() 並以 10 作為除數。每次取得的餘數都是從右側開始的下一個數字,因此最後要反轉收集到的數字。請明確處理零,因為迴圈在零的情況下不會收集到任何數字;處理負數時,請使用絕對值並另外記錄正負號。
num = -13579
sign = -1 if num < 0 else 1
remaining = abs(num)
digits = []
if remaining == 0:
digits.append(0)
else:
while remaining:
remaining, digit = divmod(remaining, 10)
digits.append(digit)
digits.reverse()
print(sign, digits)
當轉換過程必須維持數值形式時,這種算術方法很實用。產生的清單仍會依最高位數到最低位數排列;正負號則與各位數字分開處理。
用 map() 和 str.split() 將以空白分隔的數字轉換為整數
當字串中已包含彼此分開的數字 token(例如從一行輸入讀取的內容)時,可使用這個方法。str.split() 預設會依空白分割,而 map() 會對每個 token 套用 int()。這個方法不會將一般整數拆成個別數字。
text = "1 3 5 7 9"
digits = list(map(int, text.split()))
print(digits)
這種寫法適合處理以空白分隔的值。如果來源使用逗號或其他分隔符,請將該分隔符傳給 split(),並確認分割後的每個 token 都是有效的整數表示法。
用 for 迴圈將數字字串拆分為整數
如果來源是數字字串,而且明確的迴圈更方便調整,可以每次切出一個字元,再用 int() 轉換該切片。步進值和切片寬度都是 1,因此每次迭代會處理一個十進位數字。
digit_text = "13579"
digits = []
for index in range(0, len(digit_text), 1):
digits.append(int(digit_text[index:index + 1]))
print(digits)
這個迴圈會產生與列表推導式相同、由左至右排列的清單,同時讓轉換步驟一目了然。若要簡潔地將整數轉成數字清單,可用列表推導式;若要避免轉成文字,可用整數算術;若輸入已是分隔好的 token,可搭配 map() 和 str.split();若需要自訂逐字元處理方式,則可使用迴圈。若文字可能包含符號或分隔符,請先處理這些字元,再轉換數字切片。