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

【Python】重複を含むリストから特定の単語のn番目の出現を削除するプログラム

リスト内の単語に重複が含まれている場合でも、指定した単語のn番目の出現だけを削除したいケースはよくあります。このような場合、リストを先頭から順に走査しながらカウンターを1ずつ増やしていき、カウント数が指定した出現回数(n)と一致した時点で該当する要素を削除するメソッドを定義することで実現できます。

サンプルコード

def remove_word(my_list, my_word, N):
    count = 0

    for i in range(0, len(my_list)):
        if (my_list[i] == my_word):
            count = count + 1

        if(count == N):
            del(my_list[i])
            return True

    return False

my_list = ['Harry', 'Jane', 'Will', 'Rob', 'Harry']
print("The list is :")
print(my_list)
my_word = 'Harry'
N = 2

flag_val = remove_word(my_list, my_word, N)

if (flag_val == True):
    print("The updated list is: ", my_list)
else:
    print("Item hasn't been updated")

出力結果

The list is :
['Harry', 'Jane', 'Will', 'Rob', 'Harry']
The updated list is: ['Harry', 'Jane', 'Will', 'Rob']

処理の流れと解説

  • まず「remove_word」という名前のメソッドを定義します。引数として、対象となるリスト、削除したい単語、そして出現回数を表す「n」の値を受け取ります。

  • カウント用の変数「count」を0で初期化します。

  • リストを先頭から順に走査し、各要素が指定した単語と一致するかどうかを確認します。

  • 要素が単語と一致した場合、「count」変数の値を1つ増やします。

  • このcount変数の値が「n」と等しくなったタイミングで、その位置にある要素をリストから削除します。

  • 要素の削除には、Pythonの「del」キーワードを使用しています。

  • 文字列のリストを定義し、その内容をコンソールに表示します。

  • 必要なパラメータを渡してメソッドを呼び出し、処理を実行します。

  • 更新後のリストがコンソールに出力されます。

ポイント

このアプローチの利点は、元のリストを直接変更できる点です。該当するn番目の出現が見つかった時点で「True」を返し、最後まで見つからなかった場合には「False」を返すため、呼び出し側で削除が成功したかどうかを簡単に判定できます。なお、リスト内包表記などを使えばより簡潔に書くことも可能ですが、元のリスト自体をその場で更新したい場合には、本記事のように「del」キーワードを活用する方法が適しています。

  1. 【Python】連結リストから指定した値の最後の出現を削除する方法

    問題の概要 片方向連結リストと、削除対象となる値(target)が与えられたとき、リスト内で最後に出現するtargetだけを削除するプログラムを考えます。 たとえば、入力が [5,4,2,6,5,2,3,2,4,5,4,7]、target = 5 の場合、末尾側にある5(10番目の要素)を取り除くため、出力は [5, 4, 2, 6, 5, 2, 3, 2, 4, 4, 7] となります。 解法のアルゴリズム ポイントは、リストを前から順に走査しながら、「targetが見つかるたびに、その1つ前のノード」を変数に記録しておくことです。走査が終わった時点で残っている記録こそが、最後の出現位置の直

  2. Pythonで指定された文字列の文字から作成できるサイズkの回文の総数を数える方法

    アルファベット文字からなる文字列 s と整数 k が与えられたとします。このとき、s に含まれる文字だけを使って構成できる「長さ k の回文」の総数を求めます。同じ文字は何度でも繰り返し使用して構いません。例えば、入力が s = xy、k = 4 の場合、出力は 4 になります。これは、作成できる回文が [xxxx, yyyy, xyyx, yxxy] の 4 通りだからです。解法のアプローチこの問題は、回文の性質を利用すると非常にシンプルに解けます。長さ k の回文では、前半部分が決まれば後半部分は自動的に鏡像として決まるため、自由に選べるのは前半の文字だけです。さらに k が奇数の場合は、