[解決済み] Pythonのリストから複数の項目を1つのステートメントで削除する
2022-04-26 08:51:45
質問
Pythonで、リストから項目を削除する方法を知っています。
item_list = ['item', 5, 'foo', 3.14, True]
item_list.remove('item')
item_list.remove(5)
この上記のコードは、item_listから値5と'item'を削除しています。 しかし、削除するものがたくさんあるときは、何行も書いて
item_list.remove("something_to_remove")
削除するもののインデックスがわかっている場合は、それを使う。
del item_list[x]
ここで、xは削除したい項目のインデックスです。
削除したい番号のインデックスが全て分かっている場合は、何らかのループを使って
del
をインデックスで指定します。
しかし、削除したい項目のインデックスがわからない場合はどうすればいいのでしょうか?
試しに
item_list.remove('item', 'foo')
というエラーが発生しました。
remove
は引数を1つしか取らない。
1つのステートメントでリストから複数の項目を削除する方法はありますか?
追伸:私はこれまで
del
と
remove
. どなたかこの2つの違い、あるいは同じものであることを説明していただけませんか?
ありがとうございます
解決方法は?
Pythonでは、既存のオブジェクトを変更するよりも、新しいオブジェクトを作成する方が良い場合が多いです。
item_list = ['item', 5, 'foo', 3.14, True]
item_list = [e for e in item_list if e not in ('item', 5)]
と等価である。
item_list = ['item', 5, 'foo', 3.14, True]
new_list = []
for e in item_list:
if e not in ('item', 5):
new_list.append(e)
item_list = new_list
フィルタリングされた値の大きなリストの場合(ここでは。
('item', 5)
は小さな要素の集合です)。
set
の方が速いので
in
操作
は平均でO(1)の時間計算量
. また、リスト内包の繰り返しごとにイテラブルを作成するのではなく、削除するイテラブルを先に作成するのも良いアイデアです。
unwanted = {'item', 5}
item_list = [e for e in item_list if e not in unwanted]
A ブルームフィルタ は、メモリが安くない場合は、良い解決策でもあります。
関連
-
[解決済み] 複数の例外を1行でキャッチする(ブロックを除く)
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] リストからランダムに項目を選択するにはどうすればよいですか?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] インデックスを指定してリストから要素を削除する方法
-
[解決済み] Pythonのswitch文の代用品?
-
[解決済み] Pythonでファイル名から拡張子を抽出する
-
[解決済み] リスト内の重複を削除する
-
[解決済み] 反復処理中にリストから項目を削除するには?
-
[解決済み] リストの順番を維持したまま、重複を削除するにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
python call matlab メソッドの詳細
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】Pythonスクリプトで「Expected 2D array, got 1D array instead: 」というエラーが発生?
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】ValueError: xとyは同じサイズでなければならない
-
[解決済み] リストから複数の要素を削除する