私は2つのリストを持っています:
list_a = [1,5,8]
list_b = [12,4,2,5,7,5,3,6,8]
の要素は、list_a
の要素のインデックスに対応しlist_b
ます。両方のリストのサイズが 100 を超えています。
list_b
インデックスが にある要素を削除するにはどうlist_a
すればよいので、上のリストを取得すると、結果のリストは になり[12,2,5,7,3,6]
ますか?
2 つのオプション:
リスト内包表記で新しいリストを作成します。
newlist = [el for i, el in enumerate(oldlist) if i not in indices_to_delete]
の場合、これはさらに高速になりindices_to_delete
ますset
。
indices_to_delete = set(indices_to_delete)
newlist = [el for i, el in enumerate(oldlist) if i not in indices_to_delete]
セット内のメンバーシップ テストは O(1) 対リスト内の O(n) であるためです。
インプレース リストから逆順に並べ替えられたインデックスを削除します。
for index in sorted(indices_to_delete, reversed=True):
del oldlist[index]
アイテムを逆順で削除しないindices_to_delete
と、インデックスが小さいアイテムが削除されるため、インデックスが大きいアイテムが上に移動し、残りのアイテムは削除する必要があったアイテムと一致しなくなります。
これにより、次のことが達成されます。
for delidx in reversed(toDelete):
del otherList[delidx]
また、リスト内包表記を使用すると、次のようになります。
l2 = [elem for i, elem in enumerate(l1) if i not in toDelete]
質問を理解した今
a = numpy.array(list2)
mask = [True]*len(a)
mask[list1] = False
print a[mask]