Pythonで別のリストのインデックスを指定してリストから要素を削除する方法
Pythonでインデックスリストに基づいてリストの要素を削除する方法
ここでは2つのリストを扱います。L1は要素を削除する対象となるリストオブジェクト、L2は削除したい要素のインデックスを格納したリストです。
>>> L1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> L2 = [2, 4, 6]
L2で指定されたインデックスにある要素をL1から取り除くには、まずL1からenumerateオブジェクトを作成します。enumerate()関数は、リスト内の各要素とそのインデックスをペアにしたタプルのコレクション(enumerateオブジェクト)を返します。
次に、このenumerateオブジェクトに対して2つの変数を使ったforループを実行し、各インデックスがL2の要素と一致するかどうかを順番に判定します。一致した場合は、L1の対応する位置の要素を削除します。以下がそのコードです。
>>> e = enumerate(L1)
>>> for i, j in e:
if i in L2:
del L1[i]
実行後のL1には、L2で指定されたインデックス以外の要素だけが残ります。
>>> L1
[1, 2, 4, 5, 7, 8]
より安全な方法:リスト内包表記を使う
なお、ループ処理中にdelで要素を削除すると、リストのインデックスが前詰めでずれていくため、指定するインデックスの組み合わせによっては意図しない要素が削除される可能性があります。
実務では、リスト内包表記を使って新しいリストを作り直す方法がより安全で推奨されています。
>>> L1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> L2 = [2, 4, 6]
>>> L1 = [x for i, x in enumerate(L1) if i not in L2]
>>> L1
[1, 2, 4, 5, 7, 8]
この方法なら、元のリストを書き換えながら同時に反復処理することがないため、どのようなインデックスの組み合わせでも正しく動作します。さらに、L2をあらかじめsetに変換しておけば、in演算子による存在判定が高速化され、大きなリストを扱う際にも効率的です。
-
【Python】Tkinterでラベルのテキストを削除する方法をわかりやすく解説
Tkinterは、PythonでGUIベースのアプリケーションを作成・開発するための標準ライブラリです。この記事では、何らかのテキストが表示されているラベルから、そのテキストを削除する方法を解説します。 ラベルからテキストを削除するには、ラベルの表示を切り替えるトリガーとして機能するボタンを作成します。具体的には、config()メソッドを使ってラベルのtext属性を空の文字列に書き換えます。 サンプルコード # Tkinterライブラリをインポート from tkinter import * # tkinterフレームのインスタンスを作成 win = Tk() # ウィンドウのサイズを
-
【Python入門】関数からリストを返す基本的な方法とサンプルコード
Pythonでは、関数からリストを返す方法がいくつかあります。最も基本的なのは、関数内でリストを作成し、return文でそのリストを返すという方法です。 基本例:forループでリストを生成して返す 以下の例では、0から9までの数値を順番にリストへ追加し、完成したリストを返す関数 retList() を定義しています。 def retList(): result = [] for i in range(0, 10): result.append(i) return result a = retList() print(a) 実行結果 [0, 1,