Python では、リストから項目を削除する方法を知っています。
item_list = ['item', 5, 'foo', 3.14, True]
item_list.remove('item')
item_list.remove(5)
上記のコードは、 から値 5 と 'item' を削除しますitem_list
。ただし、削除するものが多数ある場合は、次のように多くの行を記述する必要があります。
item_list.remove("something_to_remove")
削除する対象のインデックスがわかっている場合は、次のようにします。
del item_list[x]
ここで、x は削除したい項目のインデックスです。
del
削除したいすべての数字のインデックスがわかっている場合は、インデックスにある項目に対して何らかのループを使用します。
しかし、削除したいアイテムのインデックスがわからない場合はどうすればよいでしょうか?
試してみましたitem_list.remove('item', 'foo')
が、引数は 1 つしか取れないというエラーが発生しましたremove
。
1 つのステートメントでリストから複数の項目を削除する方法はありますか?
PS 私はdel
と を使用しましたremove
。誰かこの 2 つの違いを説明していただけますか、それとも同じものですか?
ベストアンサー1
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]
あブルームフィルターメモリが安価でない場合にも、これは良い解決策です。