【python/丁寧解説】リストから文字列に一部一致する要素を複数条件で削除する方法

概要

タイトルの通りのことを実装する記事です。イメージは以下のようになります。

以下のようなリストから「xyz」と「abc」を含む文字列のみを削除したリストを得るコードの紹介です。

例えば、ファイル名のリストからファイル名の中の指定した文字列を含むものを削除したいときに使えます。

実装

まずは削除したい文字列のリストと対象のリストを定義します。

#削除したい文字列
delete_list = ["abc", "xyz"]
#対象のリスト
input_list = ["000_xyz_123456",
     "123_opq_324355",
     "000_hjk_234335",
     "345_jok_342352",
     "456_lop_332985",
     "567_abc_124534",
     "343_jqd_724674",
     "893_gqw_234566"]

以下のように処理すれば削除したい文字列が含まれたものを削除した文字列リストが得られます。

#削除した後のリスト
select_list = []

#対象のリストでfor文
for i in input_list:
    #削除したい文字列が含まれていないかのカウンター
    counter = 0
    #削除したい文字列でfor文
    for d in delete_list:
        #削除したい文字列が含まれていない場合
        if not d in i:
            #カウンターをインクリメント
            counter += 1
    
    #カウンターと削除したい文字列リストの長さ一致していたら
    if counter == len(delete_list):
        #抽出したリストに追加
        select_list.append(i)

簡単に解説したいと思います。興味ない方は飛ばしてください。

最初に削除した後のリストを空のリストとして定義します。

ここに削除したい文字列が含まれていない文字列を追加していくことになります。

#削除した後のリスト
select_list = []

次に最初のfor文です。

これは最小の文字列リストを1つずつ取り出して処理をするという意味です。

#対象のリストでfor文
for i in input_list:

次にカウンターの定義です。

これは次の処理で説明しますが、削除したい文字列が含まれているかを確認した際に

含まれいなければカウンターに+1(インクリメント)をするという使い方をします。

#削除したい文字列が含まれていないかのカウンター
counter = 0

次の処理は削除したい文字列のリストでfor文を回して処理します。

取り出した削除したい文字列が対象のリストから取り出した文字列に含まれていないかどうかを

判定します。

上記の処理は

if not 削除したい文字列 in 対象の文字列:

のように書くことができます。

含まれていない場合には

カウンターをインクリメントします。

    #削除したい文字列でfor文
    for d in delete_list:
        #削除したい文字列が含まれていない場合
        if not d in i:
            #カウンターをインクリメント
            counter += 1

最後の処理です。

これはもし対象の文字列に削除したい文字列が含まれていない場合には先ほどのfor処理で

削除したい文字列分if文で処理されることになるので

カウンター=削除したい文字列リストの長さ

になり、削除したい文字列が含まれていないことなります。

つまりは残したい文字列になるのでそれを出力リストに追加することになります。

    #カウンターと削除したい文字列リストの長さ一致していたら
    if counter == len(delete_list):
        #抽出したリストに追加
        select_list.append(i)

最後に

ネット検索しても今回の処理を紹介している記事がありませんでしたので今回記事しました。

参考になればと思います。

コメント

タイトルとURLをコピーしました