Pythonで文字列から数値だけを抽出する方法|isdigitとリスト内包表記の使い方
はじめに
Pythonで文字列の中から数字(数値)だけを取り出したい場面は多くあります。例えば、ユーザー入力やログデータ、テキストファイルから数値情報を取得するケースなどです。
このような場合には、リスト内包表記とisdigitメソッドを組み合わせることで、シンプルかつ効率的に実現できます。
サンプルコード
以下は、文字列から数字を抽出する基本的な実装例です。
my_string = "python is 12 fun 2 learn"
print("元の文字列:")
print(my_string)
my_result = [int(i) for i in my_string.split() if i.isdigit()]
print("抽出された数値リスト:")
print(my_result)実行結果
元の文字列: python is 12 fun 2 learn 抽出された数値リスト: [12, 2]
コードの解説
- まず、対象となる文字列my_stringを定義し、コンソールに表示します。
- リスト内包表記を使って、
split()で分割した各単語に対して反復処理を行います。 - 各要素に対して
isdigit()メソッドで「その要素が数字のみで構成されているか」を判定します。 - 条件が真の要素だけが
int()によって整数型へ変換され、新しいリストとして格納されます。 - 最終的に、変換済みの数値リストがコンソールに出力されます。
isdigitメソッドについて
isdigit()は文字列型のメソッドで、対象の文字列が0〜9の数字のみで構成されている場合にTrueを返します。英字や記号、空白が含まれる場合はFalseとなるため、不要なデータを確実に除外できます。
注意点
isdigit()は負の符号(-)や小数点(.)を含む文字列にはFalseを返します。例えば「-5」や「3.14」のような数値を抽出したい場合は、正規表現(reモジュール)を使う方法が適しています。
正規表現を使った代替例
import re my_string = "python is 12 fun 2 learn" numbers = re.findall(r'\d+', my_string) print([int(n) for n in numbers]) # 出力: [12, 2]
まとめ
文字列から数字を抽出する最もシンプルな方法は、split()とisdigit()、そしてリスト内包表記を組み合わせることです。整数のみを扱う場合はこの手法で十分ですが、負数や小数も対象としたい場合は正規表現の活用を検討しましょう。用途に応じて適切な方法を選ぶことが、読みやすく保守性の高いコードにつながります。
-
Pythonで文字列から数字を抽出する方法【isdigitと正規表現の使い分け】
正の整数だけを抽出するシンプルな方法文字列に含まれる正の整数だけを取り出したい場合は、split()で空白ごとに文字列を分割し、isdigit()で各要素が数字のみで構成されているかを判定する方法が手軽です。>>> s = h3110 23 cat 444.4 rabbit 11 2 dog >>> [int(x) for x in s.split() if x.isdigit()] [23, 11, 2]この方法では、すべてが数字で構成された要素だけが整数に変換されてリストに追加されます。そのため「h3110」のように文字と数字が混ざった語句や、「444.
-
Pythonで文字列が数字のみで構成されているかどうかを判定する方法
Pythonの文字列(String)クラスには isdigit() というメソッドが用意されています。このメソッドは、文字列に少なくとも1文字以上が含まれ、そのすべてが数字である場合に True を返し、そうでない場合には False を返します。 isdigit() メソッドの使用例 print(12345.isdigit()) print(12345a.isdigit()) 実行結果 True False 上記の例では、純粋な数字のみの文字列「12345」は True、アルファベットが混ざった「12345a」は False と判定されています。 なお、isdigit() はマイナス記号や小