Pythonで文字列の先頭にゼロ(先行ゼロ)を追加する方法
Pythonでは、データ要素に対して文字列としてゼロを追加したい場面がしばしばあります。その目的は、見た目を整えるためのフォーマットだったり、これらの値が入力として使われる計算処理のためだったりします。本記事では、文字列の先頭にゼロを追加する代表的な2つの方法を、具体的なコード例とともに紹介します。
format()関数を使う方法
まずはformat()関数を使う方法です。DataFrameを用意し、ゼロを追加したい列に対してformat関数を適用します。lambda式を使うことで、各要素に対して繰り返し関数を適用できます。
書式指定子 {0:0>10} の意味は、「全体を10桁にし、足りない分を左側(先頭)に0で埋める」というものです。桁数は自由に変更できます。
コード例
import pandas as pd
string = {'Column' : ['HOPE','FOR','THE','BEST']}
dataframe=pd.DataFrame(string)
print("given column is ")
print(dataframe)
dataframe['Column']=dataframe['Column'].apply(lambda i: '{0:0>10}'.format(i))
print("\n leading zeros is")
print(dataframe)実行結果
上記のコードを実行すると、次のような結果が出力されます。
given column is Column 0 HOPE 1 FOR 2 THE 3 BEST leading zeros is Column 0 000000HOPE 1 0000000FOR 2 0000000THE 3 000000BEST
rjust()メソッドを使う方法
次に、rjust()(右寄せ)メソッドを使う方法です。rjust関数に引数として渡す値によって、文字列を右寄せし、余った幅を指定した文字で埋めることができます。この例では、3つのゼロを先頭に追加しています。
ポイントは、追加するゼロの個数を変数で動的に指定できることです。ここでは i + len(val) とすることで、元の文字列の長さに追加したいゼロの数を加えた合計の幅を指定しています。
コード例
val = '98.6 is normal body temperature'
print("The given string is :\n " + str(val))
#Number of zeros to be added
i = 3
result = val.rjust(i + len(val), '0')
print("adding leading zeros to the string is :\n" + str(result))実行結果
上記のコードを実行すると、次のような結果が出力されます。
The given string is : 98.6 is normal body temperature adding leading zeros to the string is : 00098.6 is normal body temperature
まとめ
- format():書式指定子を使って桁数を揃えたい場合に便利。DataFrameの列全体への一括適用にも向いています。
- rjust():右寄せで埋め文字を指定できるシンプルなメソッド。追加するゼロの数を動的に制御しやすいのが特徴です。
用途に応じて使い分けることで、IDやコード番号の整形など、さまざまな場面で文字列のフォーマットを効率的に行えます。
-
Pythonで文字列が回転で一致するか判定する方法
文字列の回転マッチング問題とは2つの文字列 A と B が与えられたとき、文字列 A を回転させて、いずれかの時点で B と一致するかどうかを判定する問題を考えてみましょう。一致する回転位置が存在すれば True を返し、存在しなければ False を返します。例えば、A = abcde、B = cdeab の場合、A を2文字分回転させると cdeab になるため、答えは True となります。一方、B = acdeb のような場合はどれだけ回転しても一致しないため、False が返されます。解法のアプローチこの問題は「連結テクニック」を使うと効率的に解けます。基本的な考え方は以下の通りです
-
Pythonで文字列を逆順に反転する方法|追加メモリ不要のインプレース手法
文字の配列が与えられたとき、追加のメモリ領域を使用せずに文字列を逆順に反転することを考えます。たとえば、入力が [H, E, L, L, O] である場合、期待される出力は [O, L, L, E, H] となります。 解法のアプローチ この問題は「Two Pointers(ツーポインタ)」と呼ばれる定番のテクニックで効率的に解けます。考え方はシンプルで、配列の両端から中央に向かって文字を交換していくだけです。 手順 2つのポインタを用意します:start = 0、end = 文字列の長さ - 1 s[start] と s[end] の文字を入れ替えます start を1つ増やし、end を