HOWTO · Python

Python で整数を数字に分割する

このチュートリアルでは、Python で整数を数字に分割する方法を示します

このページの内容

整数を各桁のリストにするには、文字列に変換してから、各文字を int() で整数に戻します。桁は左から順に並びます。負の整数では符号を分け、絶対値を各桁に分解します。ゼロは [0] とします。文字列への変換が適さない場合は整数演算を、入力がすでに空白区切りの数字を含む文字列なら map() と str.split() を使います。

リスト内包表記で Python の整数を各桁に分解する

入力が整数で、通常の左から右の順に並んだ各桁のリストが必要な場合は、リスト内包表記が最も直接的な方法です。str() を使うと10進数の各桁が1文字ずつ取り出され、int() でそれぞれを整数に変換できます。

num = 13579
digits = [int(character) for character in str(num)]
print(digits)

このコードは 13579 の各桁を整数の要素として生成します。同じ式をゼロに適用すると [0] が返ります。負の数では abs(num) を分解し、必要に応じて符号を別の変数で保持します。整数には先頭のゼロが保持されないため、それが重要な場合は元の文字列を使ってください。

整数演算で Python の整数を各桁に分解する

値を文字列に変換せずに処理するには、10 を使って divmod() を繰り返します。余りは右端から順に次の桁になるため、最後に集めた桁を逆順にします。ループではゼロの桁を収集できないので、ゼロは明示的に処理します。負の入力では絶対値を使い、符号は別に記録します。

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() で空白区切りの数字を Python の整数に変換する

入力が、たとえば1行から読み込んだ文字列のように、すでに個別の数字トークンに分かれている場合に使います。str.split() は既定で空白を区切りとして分割し、map() は各トークンに int() を適用します。この方法では通常の整数を1桁ずつに分解できません。

text = "1 3 5 7 9"
digits = list(map(int, text.split()))
print(digits)

この形式は、空白区切りの値を扱うときに便利です。入力でカンマなど別の区切り文字が使われている場合は、その区切り文字を split() に渡し、分割後の各トークンが有効な整数表現であることを確認してください。

for ループで Python の数字文字列を整数に分解する

元のデータが数字文字列で、明示的なループのほうが調整しやすい場合は、1文字ずつスライスして int() で変換します。ステップ幅とスライス幅はいずれも 1 なので、各反復で10進数の1桁を処理します。

digit_text = "13579"
digits = []

for index in range(0, len(digit_text), 1):
    digits.append(int(digit_text[index:index + 1]))

print(digits)

このループは、変換処理を明示しながら、リスト内包表記と同じ左から右のリストを作ります。整数を手短に各桁へ分解するならリスト内包表記、文字列への変換を避けるなら整数演算、すでに分割されたトークンには map() と str.split()、文字ごとの処理を調整するならループを使います。符号や区切り文字を含む可能性のある文字列では、桁を変換する前にそれらを処理してください。