0

リスト内包表記を使用して、指定されていないアイテムを保持するだけで、リストから多数のアイテムを削除しようとしています。

たとえば、2 つのリストがa = [1,3,5,7,10]あり、 の番号に対応するインデックスにないb = [2,4]すべてのアイテムを保持したい場合。ab

今、私は使用しようとしましy = [a[x] for x not in b]たが、これは SyntaxError を生成します。

y = [a[x] for x in b]正常に動作し、削除したい要素を正確に保持します。

では、どうすればこれを達成できますか?余談ですが、これは良い方法ですか、それとも使用する必要がありますdelか?

4

4 に答える 4

6

でインデックスを使用enumerate()および検索できますb

>>> a = [1, 3, 5, 7, 10]
>>> b = [2, 4]
>>> [item for index, item in enumerate(a) if index not in b]
[1, 3, 7]

ルックアップ時間を改善するには、 をリストではなくセットbにすることをお勧めします。セットへのルックアップは、リスト内にある間は平均です。 はリストの長さです。O(1)O(n)n

于 2016-08-31T13:46:41.467 に答える
-1

この後:

y = [a[x] for x in b]

追加するだけです:

for x in y:
    a.remove(x)

次に、必要最小限のリストが

于 2016-08-31T13:50:08.030 に答える