Pythonで指定した文字をすべて含む文字列(スーパーシーケンス)をフィルタリングする方法
Pythonでは、リストの中から特定の文字をすべて含む文字列(スーパーシーケンス)だけを抽出したいケースがあります。そんなときは、シンプルなリスト内包表記と all() 関数を組み合わせることで、簡潔かつ効率的にフィルタリングを実現できます。
実装例
以下に具体的なサンプルコードを示します。
my_list = ["Python", "/", "is", "alwaysgreat", "to", "learn"]
print("The list is :")
print(my_list)
substring = "ys"
my_result = [sub for sub in my_list if all(elem in sub for elem in substring)]
print("The resultant string is :")
print(my_result)
出力結果
The list is : ['Python', '/', 'is', 'alwaysgreat', 'to', 'learn'] The resultant string is : ['alwaysgreat']
コードの解説
まず、文字列のリストを定義し、その内容をコンソールに表示します。
次に、フィルタリングの条件となる部分文字列「ys」を定義します。
リスト内包表記の中で
all()関数を使用し、リストの各要素が部分文字列のすべての文字を含んでいるかどうかを順番に判定します。条件を満たした要素だけが新しいリストとして変数
my_resultに代入されます。最後に、その結果をコンソールに出力して完了です。
ポイント解説
このコードの核となるのは、all() 関数とジェネレータ式の組み合わせです。elem in sub の部分で、部分文字列 substring の各文字が対象の文字列 sub 内に存在するかを1文字ずつ確認し、すべての文字が存在する場合にのみ True を返します。
今回の例では「y」と「s」の両方を含む文字列だけが残るため、結果として「alwaysgreat」のみが出力されています。この手法は、複数のキーワードをすべて含む記事やタグの絞り込みなど、さまざまな場面で応用できる便利なテクニックです。
-
Pythonのラムダ式とfilter()関数を実例でわかりやすく解説
この記事では、Python 3.x(およびそれ以前のバージョン)におけるラムダ式と filter() 関数について学びます。どちらの機能もPythonの標準ライブラリに組み込まれており、追加のインポートなしですぐに利用できます。 ラムダ式とは? ラムダ式を使うと、インライン関数(その場で定義する小さな関数)を簡潔に記述できます。ラムダ式は、キーワード lambda の後にカンマ区切りの引数リストと、それらの引数を使って評価される式を続けて記述します。 構文 lambda 引数: 式 戻り値: 引数を式に代入して計算された値が返されます。 ラムダ式には関数名を付けないため、「匿名関数(無名関数)
-
Pythonで文字列のリストを並べ替える方法:sort()とsorted()の使い分け
Pythonでは、文字列のリストを並べ替える方法が2つ用意されています。リスト自体を直接変更するsort()メソッドと、元のリストを保持したまま新しい並べ替え済みリストを作成するsorted()関数です。それぞれの特徴と使い方を解説します。 sort()メソッドでリストをその場で並べ替える sort()は、リストそのものを並べ替える「in-place(破壊的)」な操作です。元のリストの順序が直接変更されるため、戻り値を受け取る必要はありません。 >>> a = [Hello, My, Followers] >>> a.sort() >>>