Pythonで文字列を整数に変換する方法:例を使ったステップバイステップガイド

Pythonでは、文字列として保存された数値を扱うのがかなり面倒な作業です。ユーザー入力の解析、データファイルの読み取り、APIからの情報の取得など、どのような場合でも、計算を行うために文字列表現を実際の数値に変換する必要があることがよくあります。もちろん、Pythonのint()関数が頼りになりますが、見た目ほど簡単とは限りません。文字列の基数が異なっている場合(2進数や16進数など)、無効な値である場合、あるいは小数点が含まれている場合もあります。こうした処理を効率的かつ安全に行うことが、行き詰まりを招くクラッシュやバグを回避する鍵となります。このガイドでは、Pythonで文字列を整数に変換する様々な方法を解説します。単純な変換から、入力がそれほどクリーンではない場合の複雑なケースまで、あらゆる方法を網羅しています。異なる記数法への対応、例外をスローせずに無効な入力を処理する方法、浮動小数点のような文字列を変換する方法など、いくつかのヒントも紹介します。目標は、計算中に混乱することなく、文字列から数値を取り出し、計算できるようにすることです。

Pythonで文字列を整数に変換する方法

方法1: 小数文字列を整数に変換する

これは基本です。文字列は「42」のような通常の10進数です。そのまま渡すだけでint()大丈夫です。文字列によっては、特にスペースやその他の文字が含まれていると、奇妙な動作をすることがありますので、入力データがクリーンであるか、事前に不要な文字を削除してください。

s = "42" n = int(s) print(n * 2) # Output: 84

設定によっては、特にユーザー入力がある場合はエラー処理(try/except)を追加すると便利ですが、クリーンなデータの場合はそれだけで十分です。文字列が適切な数値でない場合は、 が返されることを覚えておいてくださいValueError

方法2: 文字列を他の基数(2進数、16進数、8進数)に変換する

数値が2進数(「1010」)や16進数(「1A」)など、別の基数で指定されている場合は、int()どの基数を使用するかを指定する必要があります。これは多くの人が戸惑う点です。なぜなら、単に10進数を指定するとint("1010")デフォルトで10進数(10ではなく1010)になってしまうからです。

# Binary b = "1010" n = int(b, 2) # Output: 10 # Hexadecimal h = "1A" m = int(h, 16) # Output: 26

Pythonは2から36までの基数をサポートしているので、非常に柔軟に扱うことができます。ただし、正しい基数を指定しないと10進数として解釈されてしまうため、注意しないと混乱を招くバグが発生する可能性があります。

方法3: 無効な入力を安全に処理する

正直に言うと、ユーザー入力や乱雑なデータはどうでしょう?それらは必ずしも完璧とは限りません。そのため、呼び出しをtry/exceptint()ブロックで囲むのは大変便利です。「abc」や「12.3」といった不適切な入力でプログラムがクラッシュするのを防ぐことができます。

s = "abc" try: n = int(s) print(n) except ValueError: print("Invalid input: cannot convert to integer")

ファイルなどから正の整数のみを取得する場合は、 で確認できますstr.isdigit()。ただし、isdigit()負数や小数は認識されないので注意してください。

s = "12345" if s.isdigit(): print(int(s)) else: print("Not a pure digit string")

理由はよく分かりませんが、特に符号や小数点のある入力ではisdigit()うまくいかないので、 try/exceptルートの方が安全です。

方法4: 浮動小数点文字列を整数に変換する

「88.8」や「12.5」といった文字列を見たことはありますか? Pythonで直接変換しようとするとint()エラーが発生します。回避策としては、まず文字列をfloat型に変換し、次にint型にキャストします。こうすればシンプルになりますが、注意が必要です。0に近づくにつれて切り捨てられるため、小数部が失われます。

s = "88.8" n = int(float(s)) # Result: 88 (fraction truncated)

最も近い整数に丸めたい場合は、int()と交換してくださいround()

s = "88.8" n = round(float(s)) # Result: 89

方法5: 文字列のリストを整数に変換する

数値文字列のリストを扱う場合、毎回手動でループする必要はありません。map ()またはリスト内包表記を使用すると、便利で高速です。

xs = ["1", "2", "3"] # Using map: nums = list(map(int, xs)) # [1, 2, 3] # Using list comprehension: nums = [int(x) for x in xs]

無効な項目が見つかりましたか?エラーを適切に処理するカスタム関数でロジックをラップしましょうtry/except。特にデータソースがクリーンでない場合は、安全第一に対処しましょう。

注意すべきよくある落とし穴

  • int()「hello」のような数値以外の文字列を試みると、クラッシュが起こりますValueError。クラッシュする前に対処したほうがよいでしょう。
  • ❌ 「12.5」のように float を直接渡すことは避けてください。まず float に変換してから int に変換してください。そうしないとエラーが発生します。
  • ❌ 基数を忘れる — base=2を指定しない限り、「1010」は10進数の1010です。それ以外の場合は、2進数ではありません。

最後に

Pythonで文字列を整数に変換するのは、それほど難しいことではありませんが、様々な形式や潜在的なエラーへの対処方法を理解することで、スクリプトが不安定になるか、信頼できるものになるかの大きな違いが生まれます。ユーザー入力の解析、バイナリデータの処理、乱雑なデータセットのクリーンアップなど、どのような作業でも、これらのテクニックはスムーズに動作させるためのツールキットとなります。

これらをマスターすれば、コードはそれほど脆弱ではなくなります。時々少し面倒になるだけですが、それがプログラミングですよね?