2016-07-28 5 views
-2

私は、要素の次のリストがある場合:インデックスのリストを使用してリストから要素を削除するにはどうすればよいですか?

list = ['one', 'two', 'three', 'four'] 

をし、私は上記のリストから削除する必要があるインデックスが含まれ、別のリストがあります:

to_delete = [0,2] 

私はからこれらの要素を削除することができますどのようにlistto_deleteを使用していますか? forループを使用すると、リストから1つの要素を削除すると、残りの要素のインデックスが変更されるため、明らかに機能しません。

どうすればよいですか?

+0

あなたは何ができますか?何を試しましたか? – mhawke

+0

私はちょうど数時間前にこれらの質問の1つを持っていたと思います。 – user2357112

+0

'to_delete'がソートされている場合は、あなたが提案したようにforループを逆順に削除することができます。 –

答えて

4

enumerateを条件付きリスト内包と共に使用すると、のすべての要素(to_delete)を含まない新しいリストを生成できます。

my_list = ['one', 'two', 'three', 'four'] 
to_delete = [0,2] 

new_list = [val for n, val in enumerate(my_list) if n not in to_delete] 

>>> new_list 
['two', 'four'] 
+0

これは最善のアプローチであるので、どのようにアップアップされていないのかよく分かりませんが、大きなリストのためにセットをto_deleteにしてください。 –

2

使用リスト内包フィルタリング:

[ my_list[i] for i in range(len(my_list)) if i not in to_delete ] 
+0

その名前を 'list'にしたくありません。 –

+0

OP命名に続く@MosesKoledoye。 –

+1

それはまだ悪い考えです。 OPが何か間違ったことを行っている場合は、修正してください。ただ無視しないでください。 – MattDMo

関連する問題