PythonでLeet文字列変換

Leetとは、アルファベットを似た形の数字や記号で置き換える表現。例えば、「Python」を「Py+h0n」とするなど。

Leet文字列変換のルール

アルファベット文字列を「a」→「@」、「i」→「1」、「o」→「0」、「t」→「+」のルールで置き換えて表示する。

方法1: str.translate()を使う

複数の置換ルールを指定して変換する場合、str型のtranslate()メソッドを利用する。

# coding: utf-8

text = 'Python Programming'
m = {'a':'@',  'i':'1', 'o':'0', 't':'+'}

t = text.translate(str.maketrans(m))
print(t)

# => Py+h0n Pr0gr@mm1ng
 

置換元と置換先の連結した文字列を指定して次のような書き方もできます。

# coding: utf-8

text = 'Python Programming'

t = text.translate(str.maketrans('aiot', '@10+'))
print(t)

# => Py+h0n Pr0gr@mm1ng
 

方法2: リスト内包を使って書く

str.translate()を知っていれば一番良いですが、それ以外の書き方も可能です。map(function, iterable, ...)を利用して、リスト要素に対して順に変換を適用します。dict型のget()メソットは、第一引数で指定したkeyが存在しなかった場合に、第二引数の値を返します。

# coding: utf-8

text = 'Python Programming'
m = {'a':'@',  'i':'1', 'o':'0', 't':'+'}

t = ''.join(m.get(c, c) for c in text)
print(t)

# => Py+h0n Pr0gr@mm1ng

方法3: lambdaを使って書く

リスト内包とほとんど同じですが、lambdaを使って書くこともできます。

# coding: utf-8

text = 'Python Programming'
m = {'a':'@',  'i':'1', 'o':'0', 't':'+'}

t = ''.join(list(map(lambda c: m.get(c,c), text)))
print(t)

# => Py+h0n Pr0gr@mm1ng

Pythonの基礎学習

[PR]これらのプログラムはPythonの基本的な文法とライブラリで実装することができます。Pythonの基礎学習には下記のようなサイトの利用が有効です。

click.linksynergy.com

click.linksynergy.com

click.linksynergy.com