Python 複数の文字列を中央揃え/左寄せ/右寄せで同じ長さにする

やりたいこと

複数の文字列を同じ長さにしたい。

環境

Google Colaboratory

>Googleが提供しているJupyter Notebookのようにブラウザ上でPythonを記述・実行できる環境のこと。

無料だし、開発環境整える必要ないし、GPU環境でディープラーニングや機械学習が実装できるという素晴らしいツールです。

失敗

昨日、Python 先頭にいくつかある半角数字だけ削除したいを書きました。

zfillメソッドしか知らなかった私は、最長文字列に合わせてゼロで左から埋め、ゼロを全角スペースに置き換えることで文字列の長さをそろえられると思ったのです。

import re

#対象文字列
str1 = 'いぬ'
str2 = 'ねこ'
str3 = 'さかな'
str4 = 'ペンギン'

#最長文字列長を調べる
#lengthで文字列長をひとつのリストに入れる
strlen_list = [len(str1), len(str2), len(str3), len(str4)]
print(strlen_list) #[2, 2, 3, 4]
#リストの最大値を求める
strlen = max(strlen_list)
print(strlen) #4

#指定した長さになるよう文字列を右寄せして0で埋める
z_str1 = str1.zfill(strlen)
z_str2 = str2.zfill(strlen)
z_str3 = str3.zfill(strlen)
z_str4 = str4.zfill(strlen)
print(z_str1, z_str2, z_str3, z_str4) #00いぬ 00ねこ 0さかな ペンギン

# 0を全角スペースに置き換える
#先頭の半角数字を置換
re_str1 = re.sub('^[0-9]*',' ',z_str1) #00を' 'に置換
re_str2 = re.sub('^[0-9]*',' ',z_str2) #00を' 'に置換
re_str3 = re.sub('^[0-9]*',' ',z_str3) #0を' 'に置換
re_str4 = re.sub('^[0-9]*',' ',z_str4) #置換なし

print(str1,"  ->>",re_str1,"len=",len(re_str1))  #いぬ   ->>  いぬ len= 3
print(str2,"  ->>",re_str2,"len=",len(re_str2))  #ねこ   ->>  ねこ len= 3
print(str3," ->>",re_str3,"len=",len(re_str3))    #さかな  ->>  さかな len= 4
print(str4,"->>",re_str4,"len=",len(re_str4))      #ペンギン ->>  ペンギン len= 5

甘かった。この方法だといくつ0があろうと、すべてひとつのスペースに置き換えられてしまうので、文字列長はそろわず。しかも、文字が右側に寄るのです。

長さをそろえることもできないし、中央揃え、左寄せにも対応できない。いいところなしです。がっかり。

方法

#対象文字列
str1 = 'いぬ'
str2 = 'ねこ'
str3 = 'さかな'
str4 = 'ペンギン'

#最長文字列長を調べる
#lengthで文字列長をひとつのリストに入れる
strlen_list = [len(str1), len(str2), len(str3), len(str4)]
print(strlen_list) #[2, 2, 3, 4]
#リストの最大値を求める
strlen = max(strlen_list)
print(strlen) #4


#中央揃え
c_str1 = str1.center(strlen)
c_str2 = str2.center(strlen)
c_str3 = str3.center(strlen)
c_str4 = str4.center(strlen)

print(c_str1)   # いぬ 
print(c_str2)   # ねこ 
print(c_str3)   #さかな 
print(c_str4)   #ペンギン

print(len(c_str1),len(c_str2),len(c_str3),len(c_str4)) #4 4 4 4


#左寄せ
l_str1 = str1.ljust(strlen)
l_str2 = str2.ljust(strlen)
l_str3 = str3.ljust(strlen)
l_str4 = str4.ljust(strlen)

print(l_str1)   #いぬ  
print(l_str2)   #ねこ  
print(l_str3)   #さかな 
print(l_str4)   #ペンギン

print(len(l_str1),len(l_str2),len(l_str3),len(l_str4)) #4 4 4 4



#右寄せ
r_str1 = str1.rjust(strlen)
r_str2 = str2.rjust(strlen)
r_str3 = str3.rjust(strlen)
r_str4 = str4.rjust(strlen)

print(r_str1)   #  いぬ
print(r_str2)   #  ねこ
print(r_str3)   # さかな
print(r_str4)   #ペンギン

print(len(r_str1),len(r_str2),len(r_str3),len(r_str4)) #4 4 4 4

解説

ぴったりのページを見つけました。文字列を指定した長さにして左寄せ/中央揃え/右寄せを行う(ljust, center, rjust, zfill)

検索力って大事ですね。

真ん中にできない場合は、左寄せにされるみたいです。

以上、オープンレポートでした

技術的なことで調べたり勉強したことを残していきます。日報をブログでやってみています
きっとゆるめに脱線することもあると思いますが、ゆるめに見守っていただければと思います。


参考にさせてもらったみんなのアウトプットに最大限のリスペクトと感謝を。
そして、この記事が誰かの役に立つことを願って

1

この記事を書いたのは

stsushima

2歳男の子のママです。自然言語処理、Python、GASに興味があります。 時短勤務中

合わせて読みたい