Pythonでリスト内の同じ要素を削除する方法【初心者向け解説】
問題の概要
Pythonであるリスト(L1)から、別のリスト(L2)に含まれる共通の要素を削除したい場合、コードの書き方に少し注意が必要です。特によくあるミスとして、return文をforループの中に記述してしまうことが挙げられます。
正しく動作するコード
以下のコードでは、return文をforブロックの外側に移動しているのがポイントです。これにより、すべての要素のチェックが完了してから結果が返されます。また、最後のprint文では、誤字のある「remaove_new」ではなく、正しい関数名「remove_same」を呼び出すようにしましょう。
def remove_same(L1, L2):
L1_copy = L1[:]
for e in L1_copy:
if e in L2:
L1.remove(e)
return L1
L1 = [1, 2, 3, 4]
L2 = [1, 2, 5, 6]
print(remove_same(L1, L2))実行結果
[3, 4]
コードの解説
このコードの重要なポイントは、L1_copy = L1[:] の部分です。スライスを使って元のリストのコピーを作成しています。これは、ループ処理中に元のリスト L1 を直接変更すると、イテレーションが正しく機能せず、意図しない結果になるのを防ぐためです。
コピーしたリストに対してループを行い、各要素が L2 に存在する場合は L1.remove(e) によって元のリストからその要素を削除します。すべての要素の確認が終わった後、forブロックの外にある return L1 が実行され、共通要素が取り除かれたリスト [3, 4] が返されます。
まとめ
return文は必ずforループの外に書く- ループ中に変更するリストは、あらかじめコピーしておく
- 関数名の誤字(タイポ)にも注意する
これらの点を押さえておけば、リスト間の共通要素を安全に削除できるようになります。
-
Pythonでディレクトリの中身を一覧表示する方法【os.listdirの使い方】
Pythonでディレクトリ内のファイルやサブディレクトリを一覧表示したい場合、標準ライブラリの os モジュールに含まれる os.listdir() 関数を使うのが最も基本的な方法です。この関数は、指定したパス内にあるすべてのファイルとディレクトリの名前をリスト形式で返します。os.listdir() の基本例使い方は非常にシンプルです。引数にディレクトリのパスを渡すだけで、その中身が一覧表示されます。>>> import os >>> os.listdir(.) [DLLs, Doc, etc, include, Lib, libs, LICENSE.tx
-
Pythonの文字列からANSIエスケープシーケンスを削除する方法
Pythonの文字列からANSIエスケープシーケンスを削除する方法ターミナル上でテキストに色をつける際などに使われるANSIエスケープシーケンスは、ログファイルやコマンドの出力結果に混入すると、文字列の処理や解析の妨げになることがあります。Pythonでは、正規表現(regex)を使うことで、こうしたエスケープシーケンスを簡単に取り除けます。手順はシンプルで、reモジュールのre.sub()関数を使い、エスケープシーケンスにマッチした部分を空文字列()に置き換えるだけです。ANSIエスケープシーケンスを削除するための正規表現以下の正規表現パターンが、ANSIエスケープシーケンスの検出と削除に利