Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでリスト内包表記とord()関数を使ってアルファベット以外の文字をすべて削除する方法

この記事では、Python 3.x(およびそれ以前のバージョン)におけるリスト内包表記ord()関数を活用して、文字列からアルファベット以外の文字をすべて削除するプログラムについて解説します。

アルゴリズム

処理の流れは以下の3ステップです。

  1. 与えられた文字列を走査し、各文字をチェックします。
  2. 文字コードが「a〜z」または「A〜Z」の範囲に含まれる文字のみを選択します。
  3. join()関数を使って、条件を満たした文字をすべて連結して出力します。

実装例

def remchar(input):

    # 大文字と小文字の両方をチェック
    final = [ch for ch in input if
             (ord(ch) in range(ord('a'), ord('z') + 1, 1)) or
             (ord(ch) in range(ord('A'), ord('Z') + 1, 1))]

    return ''.join(final)

# ドライバープログラム
if __name__ == "__main__":
    input = "Tutorials@point786._/?"
    print(remchar(input))

出力結果

Tutorialspoint

入力文字列「Tutorials@point786._/?」から、記号(@、.、_、/、?)や数字(786)が取り除かれ、アルファベットのみが出力されていることがわかります。

ord()関数とリスト内包表記のポイント

ord()関数は、引数として渡された1文字に対応するASCIIコード(Unicodeコードポイント)の整数値を返します。これにより、文字同士を直接比較するよりも簡単かつ高速に範囲判定を行うことができます。

また、リスト内包表記を使うことで、forループとif文を1行にまとめ、条件に合致する要素だけを効率的に抽出できます。最後にjoin()関数でフィルタリング済みの文字を連結することで、目的の出力を得られます。

補足:より簡潔な代替方法

なお、Pythonでは str.isalpha() メソッドを使えば、さらに簡潔に同じ処理を実現できます。

def remchar(input):
    return ''.join(ch for ch in input if ch.isalpha())

ただし、isalpha()はASCII以外の全角文字やアクセント付き文字も「アルファベット」とみなすため、厳密に半角英字のみを対象としたい場合は、本記事のようにord()関数で文字コード範囲を判定する方法が有効です。

まとめ

この記事では、Pythonのリスト内包表記とord()関数を組み合わせて、文字列からアルファベット以外の文字をすべて削除する方法を学びました。文字コードによる範囲判定は、テキストデータのクリーニングやバリデーション処理など、さまざまな場面で応用できる基本的かつ重要なテクニックです。

  1. Pythonで文字列から特定の文字を削除する方法|replaceと正規表現の使い方

    replace()メソッドで文字を削除するPythonの文字列(str)クラスには、文字列内の部分文字列を置換するためのreplace()メソッドが用意されています。削除したい文字を空文字列()に置き換えることで、実質的にその文字を取り除くことができます。>>> Hello people.replace(e, ) Hllo popl複数の文字を一度に削除する:正規表現を使う1行のコードで複数の文字をまとめて削除したい場合は、正規表現を使うのが便利です。削除したい文字を「|」で区切ってパターンを指定し、re.sub(置換対象パターン, 置換後の文字列, 対象文字列)という形式で

  2. Pythonで文字列から特殊文字・句読点・空白をすべて削除する方法

    Pythonで文字列に含まれる特殊文字、句読点、空白などをまとめて削除したい場合、いくつかの簡単な方法があります。ここでは代表的な2つのアプローチを紹介します。 方法1:内包表記とisalnum()を使う 文字列を1文字ずつ反復処理し、isalnum()メソッドで英数字のみを抽出する方法です。isalnum()は、その文字がアルファベットまたは数字であればTrueを返すため、それ以外の記号や空白は自動的に除外されます。 >>> string = Hello $#! People   Whitespace 7331 >>> .join(e fo