Python では、文字列、整数、および浮動小数点数をいくつかの異なる方法で相互に変換することができます。
最も単純な方法は、基本的な str()
, int()
, float()
関数を使用する方法です。
これに加えて、他の方法もいくつかあります。
文字列から数値への変換、数値から文字列への変換に入る前に、まずPythonで文字列と数値がどのように表現されるかについて少し見ておきましょう。
注:この例の実行と表示を簡単にするために、Pythonインタープリタを使用します。
文字列
Pythonの文字列リテラルは、文字をダブルクォーテーション(“)またはシングルクォーテーション(‘)で囲むことで宣言します。
Python の文字列は、実際には、各文字の Unicode を配列の要素として持つ単なる配列であり、文字列から 1 文字にアクセスするためにインデックスを使用することを可能にします。
例えば、インデックスを指定することで、これらの文字列の個々の文字にアクセスすることができます。
>>> stringFirst = "Hello World!"
>>> stringSecond = 'Again!'
>>> stringFirst[3]
'l'
>>> stringSecond[3]
'i'
数値
Python の numeric は、 integer
, float
, または complex
にすることができます。
整数には正の整数と負の整数があります。
Python 3 以降、整数は境界がなく、実質的にどんな数でも保持することができます。
Python 3以前は、32ビットランタイムでは231-1、64ビットランタイムでは263-1が上限の境界でした。
浮動小数点数も同様に長さは無制限ですが、浮動小数点数は小数点を含まなければなりません。
複素数には虚数部が必要で、これはj
で示される。
>>> integerFirst = 23
>>> floatFirst = 23.23
>>> complextFirst = 1 + 23j
文字列を数値に変換する
int()関数の使い方
文字列を整数に変換したい場合、最も簡単な方法は int()
関数を使うことです。
引数として文字列を渡せばよい。
>>> x = "23"
>>> y = "20"
>>> z = int(x) - int(y)
>>> z
3
int()に文字列で表現された整数を渡す場合は期待通りに動作しますが、渡す文字列が整数値でない場合は問題が発生します。
もし文字列の中に数字以外の文字があればint()` は例外を発生させます。
>>> x = "23a"
>>> z = int(x)
Traceback (most recent call last):
File "<stdin", line 1, in <module
ValueError: invalid literal for int() with base 10: '23a'
この例外は、有効な浮動小数点数の文字列が渡された場合にも発生します。
>>> x = "23.4"
>>> z = int(x)
Traceback (most recent call last):
File "<stdin", line 1, in <module
ValueError: invalid literal for int() with base 10: '23.4'
int()関数には、文字列を整数に変換するだけでなく、任意の基数の数字を 10 進数の整数に変換できる便利な機能があります。
例えば、base` パラメータを使用して、次のような 2 進数の文字列を 10 進数の整数に変換することができます。
>>> int('1101100', base=2)
108
同じことが、16進数 (base 16) のような他の基数に対してもできます。
>>> int('6C', base=16)
108
float()関数の使い方
文字列リテラルを浮動小数点に変換するには、float()
関数を用います。
>>> x = "23.23"
>>> y = "23.00"
>>> z = float(x) - float(y)
>>> z
0.23000000000000043
結果として得られる値は完全に正確なものではなく、単に 0.23
となるべきものであることに注意してください。
これは、文字列から数値への変換というよりも、浮動小数点演算の問題に関係しています。
float()関数は
int()` 関数よりも少し柔軟性があり、浮動小数点と整数の両方をパースして変換することができるからです。
>>> x = "23"
>>> y = "20"
>>> z = float(x) - float(y)
>>> z
3.0
int()とは異なり、
float()` は浮動小数点数でない数値を受け取ったときに例外を発生させません。
しかし、非数値が渡された場合には例外が発生します。
>>> x = "23a"
>>> z = float(x)
Traceback (most recent call last):
File "<stdin", line 1, in <module
ValueError: could not convert string to float: '23a'
float()は
int()` のように底辺 10 ではない数値を変換する機能はありませんが、科学的記数法 (別名 e-notation) で表現された数値を変換する機能は持っています。
>>> float('23e-5')
0.00023
>>> float('23e2')
2300.0
complex()関数の使用法
文字列リテラルから複素数への変換は complex()
関数によって行われます。
これを行うには、文字列は特定の書式に従わなければなりません。
特に、+
や -
演算子の周りに空白を入れずにフォーマットする必要があります。
>>> x = "5+3j"
>>> y = "3+1j"
>>> z = complex(x) + complex(y)
>>> z
(8+4j)
>>> z = complex("5+ 3j")
Traceback (most recent call last):
File "<stdin", line 1, in <module
ValueError: complex() arg is a malformed string
``` `+` または `-` 演算子の間に余分なスペースがあると、例外が発生します。
complex(“1”)
(1+0j)
complex(“1.2”)
(1.2+0j)
float()` 関数と同様に、 `complex()` も許容される数値の種類はより緩やかです。例えば、数値の虚数部は完全に省略することができますし、整数と浮動小数点数の両方をパースすることができます。
str(23) # Integer to String
’23’
str(23.3) # Float to String
‘23.3’
str(5+4j) # Complex to String
‘(5+4j)’
しかし、見ての通り、これは `int`/`float` のより柔軟な置き換えとして使うべきではありません。なぜなら、文字列化されたバージョンに数字の虚数部が自動的に追加されるからです。
### 数値から文字列への変換
#### str()関数の使い方
str()` 関数は、任意の数値型を文字列に変換するために使用することができます。
Python 3.0+ の文字列はデフォルトで Unicode なので、関数 `str()` は Python 3.0+ から利用可能です。しかし、Python 3.0以下のバージョンでは、同じ目的を達成するために `unicode()` 関数が使用されます。
“My age is {}”.format(21)
‘My age is 21’
str()`の良いところは、どんな型の数値も文字列に変換できることです。したがって、変換する数値の型に応じて正しい方法を選択することを心配する必要はありません。
#### format()関数の使い方
数値を文字列に変換するもう一つの方法は、`format()`関数を使うことです。これは、文字列の中にプレースホルダーを設定し、別のデータ型を文字列に変換してプレースホルダーを埋めることができるようにするものです。
この関数を使うには、文字列の後に `.format()` を書き、プレースホルダの引数を渡せばよい。
以下はその例です。
“You get {product} when you multiply {1} with {0}”.format(5.5, 3, product=16.5)
‘You get 16.5 when you multiply 3 with 5.5’
“`
.format()` 関数の引数は、その位置や変数名を使って個別に参照することもできます。
偽コード
裏を返せば、.format()
関数は単に str()
を使って引数を文字列に変換していることに注意してください。
つまり、本質的には前のセクションと同じように数値を文字列に変換する方法ですが、 .format()
は文字列をフォーマットするための便利な関数として機能します。
結論
Python では、文字列、整数、浮動小数点数をいくつかの異なる方法で相互に変換することができます。
最も単純な方法は、基本的な str()
, int()
, float()
関数を使用する方法です。
これに加えて、format()
関数のような他の方法もいくつかあります。
ただ、 int()
, float()
, complex()
関数には制限があり、入力文字列が期待通りにフォーマットされないと例外が発生する可能性があることを覚えておいてください。
</img