メインコンテンツへスキップ

Pythonのf-stringsで文字列を扱う

·1458 文字·3 分
目次

はじめに
#

Python 3.6で実装されたf-stringsと呼ばれる数字や文字列の表記法について、学術計算で最低限必要な範囲でまとめた。 本記事では、整数・小数の桁数指定や、指数表示を扱う。

f-stringsの基本
#

f-stringsでは、変数の桁数などを指定してprint文による表示やファイル保存できる。 基本的な使い方は以下の通り。

>>> a = 123             # 変数
>>> print(f"{a}")       # フォーマット指定なし
123
>>> print(f"{a:08.2f}") # フォーマット指定あり
00123.00

fの後にクオーテーションを2つ置き、その中で波括弧を閉じる。 波括弧内に変数を記述する。 オプションで、変数の後にコロン:を挟んでフォーマットを指定する。

なお、クオーテーションは、シングルクォート'でもダブルクォート"でも可。

全体の桁数を指定する場合
#

書式フォーマットを整数にすると、数値全体の桁数を指定できる。 小数点は1桁として扱われる。 先頭を0埋めする場合は、最初に0を置く。

>>> a = 123           # 整数
>>> print(f"{a:5}")   # 5桁で表示
  123
>>> print(f"{a:05}")  # 0埋め
00123
>>>
>>> b = 12.3456       # 小数
>>> print(f"{b:10}")  # 10桁で表示
   12.3456
>>> print(f"{b:010}") # 0埋め
00012.3456

なお、変数よりも少ない桁数を指定すると、変数を最低限表示するのに必要な桁数で表示される。

>>> a = 123         # 3桁の整数
>>> print(f"{a:1}") # 1桁に指定->3桁で表示される
123
>>>
>>> b = 12.3456     # 7桁の小数
>>> print(f"{b:2}") # 2桁に指定->7桁で表示される
12.3456

小数点以下の桁数を指定する場合
#

書式フォーマットの末尾にfを追加すると、小数点以下の桁数を指定できる。 .[数値]fとすると小数点以下の桁数が数値になる。 変数が整数型でも小数型でも同じ動作をする。 また、小数の末尾は四捨五入される。

小数点を含む全体の桁数をさらに指定する場合、小数点の前に記述する。 先頭を0埋めする場合は、さらに最初に0を置く。 ただし、小数点以下の桁数を0にすると、小数点は出力されない。

>>> a = 123             # 整数
>>> print(f"{a:.2f}")   # 小数点以下2桁
123.00
>>> print(f"{a:8.2f}")  # 小数点以下2桁、全体は8桁
  123.00
>>> print(f"{a:08.2f}") # さらに先頭を0埋めする
00123.00
>>> print(f"{a:08.0f}") # 小数点以下0桁
00000123
>>>
>>> b = 12.3456         # 小数
>>> print(f"{b:.2f}")   # 小数点以下2桁
12.35
>>> print(f"{b:8.2f}")  # 小数点以下2桁、全体は8桁
   12.35
>>> print(f"{b:08.2f}") # さらに先頭を0埋めする
00012.35
>>> print(f"{b:08.0f}") # 小数点以下0桁
00000012

指数表示の場合
#

書式フォーマットの末尾にeまたはEを追加すると、指数表示になる。 表示される指数記号の大文字・小文字は、書式フォーマットと同じになる。 デフォルトの表示桁数は12桁(指数部分込み)でである。 変数が整数型でも小数型でも同じ動作をする。

>>> a = 123          # 整数
>>> print(f"{a:e}")  # 小文字
1.230000e+02
>>> print(f"{a:E}")  # 大文字
1.230000E+02
>>>
>>> b = 12.3456      # 小数
>>> print(f"{b:e}")  # 小文字
1.234560e+01
>>> print(f"{b:E}")  # 大文字
1.234560E+01

桁数の指定はfと同じ方法。 .[数値]e, .[数値]Eとすると小数点以下の桁数が数値になる。 また、小数の末尾は四捨五入される。

小数部と指数部を含む全体の桁数をさらに指定する場合、小数点の前に記述する。 先頭を0埋めする場合は、さらに最初に0を置く。 ただし、小数点以下の桁数を0にすると、小数点は出力されない。

>>> a = 123              # 整数
>>> print(f"{a:.3e}")    # 小数点以下3桁
1.230e+02
>>> print(f"{a:10.3e}")  # 小数点以下3桁、全体は10桁
 1.230e+02
>>> print(f"{a:010.3e}") # さらに先頭を0埋めする
01.230e+02
>>> print(f"{a:10.0e}")  # 小数点以下0桁
     1e+02

複数の変数や通常の文字列も表示する
#

1個のf-strings内に、複数の変数を表示できる。

>>> a = 123
>>> b = 12.3456
>>> print(f"{a}{b}")
12312.3456

上記のように変数を並べるとスペースが付かず、見づらい。変数ではない文字列を表示したい場合は、波括弧の外側に文字列を置く。

>>> a = 123
>>> b = 12.3456
>>> print(f"figure1: {a}, figure2: {b}")
figure1: 123, figure2: 12.3456

参考
#

f-stringsの詳細をより知りたい方は、以下のページを参考のこと。

Python, formatで書式変換(0埋め、指数表記、16進数など) | note.nkmk.me f-strings の使用例 - Qiita

Helve
著者
Helve
関西在住、電機メーカ勤務のエンジニア。X(旧Twitter)で新着記事を配信中です

関連記事

KerasのステートフルRNNで学習を高速化する
·3032 文字·7 分
KerasのステートフルRNNについて解説する。
Kerasの時系列予測でgeneratorを使って大容量データを扱う 後編
·961 文字·2 分
前編で作成した時系列予測用generatorクラスを使って予測を行う。
Kerasの時系列予測でgeneratorを使って大容量データを扱う 前編
·2669 文字·6 分
Kerasの時系列予測で、Recurrentレイヤに入力するためのデータを生成するgeneratorクラスの作り方について述べる。
Kerasを使ったRNN, GRU, LSTMによる時系列予測
·1786 文字·4 分
KerasのRNN, GRU, LSTMレイヤを使って時系列データを学習させる。
Keras入門 ニューラルネットワークによる正弦波の回帰
·1246 文字·3 分
Kerasを使い、ニューラルネットワーク (NN) に正弦波を学習させる。
Scikit-learnでデータをスケール変換する
··4596 文字·10 分
Pythonの機械学習用ライブラリScikit-learnに実装されている、スケール変換について調べた。