【Python】空白文字を含まない行だけをフィルタリングして抽出する方法
Pythonで、ネストされたリスト(リストのリスト)から空白文字(スペース)を含まない行だけを抽出したい場合があります。このような処理を行うには、リスト内包表記、正規表現(reモジュール)、「not」演算子、そして「any」メソッドを組み合わせるのが効果的です。
本記事では、具体的なサンプルコードとその実行結果、さらに処理の流れについて詳しく解説します。
サンプルコード
以下は、空白文字を含む要素が1つでもある行を除外し、空白を含まない行のみを抽出するコード例です。
import re
my_list = [["python is", "fun"], ["python", "good"], ["python is cool"], ["love", "python"]]
print("元のリスト:")
print(my_list)
my_result = [row for row in my_list if not any(bool(re.search(r"\s", element)) for element in row)]
print("フィルタリング後のリスト:")
print(my_result)実行結果
元のリスト: [['python is', 'fun'], ['python', 'good'], ['python is cool'], ['love', 'python']] フィルタリング後のリスト: [['python', 'good'], ['love', 'python']]
コードの解説
まず、正規表現を扱うための
reモジュールを環境にインポートします。文字列のリストを要素として持つネストされたリストを定義し、コンソールに表示します。
リスト内包表記を使って各行を順番に走査し、正規表現の
searchメソッドで各文字列に空白文字(\s)が含まれているかどうかを判定します。anyメソッドは「行内のどれか1つでも条件を満たす要素があるか」をチェックし、not演算子と組み合わせることで「空白を含む要素が1つもない行」だけを残せるようにしています。フィルタリングされた結果は変数に代入されます。
最後に、その結果をコンソールに出力して確認します。
ポイントまとめ
re.search(r"\s", element) は、文字列にタブや改行を含む任意の空白文字が存在する場合にマッチします。したがって、この手法を使えば半角スペースだけでなく、タブ文字や改行文字が混在しているデータに対しても柔軟に対応できます。データクレンジングやテキスト前処理の場面で非常に役立つテクニックです。
-
Pythonでタプルのリストを文字列のリストに変換する方法
Pythonでデータ処理を行っていると、要素がタプルになっているリストを扱う場面に遭遇することがあります。さらに、そのタプルを文字列へ変換し、文字列のリストとして取得したいケースも少なくありません。本記事では、タプルのリストを文字列のリストに変換する2つの代表的な方法を、具体的なコード例とともに解説します。方法1:join()とリスト内包表記を使う文字列のjoin()メソッドは、シーケンス(ここではタプル)の各要素を指定した区切り文字で連結し、1つの文字列として返します。区切り文字に空文字列を指定すれば、タプル内の要素をそのまま連結できます。リスト内包表記を使えば、リスト内のすべてのタプルに対
-
Pythonで文字列のリストを並べ替える方法:sort()とsorted()の使い分け
Pythonでは、文字列のリストを並べ替える方法が2つ用意されています。リスト自体を直接変更するsort()メソッドと、元のリストを保持したまま新しい並べ替え済みリストを作成するsorted()関数です。それぞれの特徴と使い方を解説します。 sort()メソッドでリストをその場で並べ替える sort()は、リストそのものを並べ替える「in-place(破壊的)」な操作です。元のリストの順序が直接変更されるため、戻り値を受け取る必要はありません。 >>> a = [Hello, My, Followers] >>> a.sort() >>>