17

これは他のいくつかの質問 ( Python リストまたはタプルから明示的に項目を選択する 、Pythonでリストの特定のインデックスを取得する)に似ていますが、私は反対のことをしようとしています:

選択する代わりに、除外するインデックスのリスト/タプルを指定するクリーンな方法は何ですか? 次のように、除外するインデックスを指定できる R または MATLAB に似たものを考えています。

vector1 <- c('a', 'b', 'c', 'd')
vector2 <- vector1[-1] # ['b', 'c', 'd']
vector3 <- vector1[c(-1, -2)] # ['c', 'd']

Pythonで同じことを達成する良い方法はありますか? これがだまされている場合はお詫びします。何を検索すればよいか正確にはわかりませんでした。

4

6 に答える 6

22
>>> to_exclude = {1, 2}
>>> vector = ['a', 'b', 'c', 'd']
>>> vector2 = [element for i, element in enumerate(vector) if i not in to_exclude]

ここでのトリックは次のとおりです。

  • リスト内包表記を使用して、あるリストを別のリストに変換します。filter(特に、フィルタリングしている述語が、適切な名前の関数として既に存在する場合は、この関数を使用することもできます。)
  • enumerate各要素とそのインデックスをまとめて取得するために使用します。
  • anyまたは* タイプinに対して演算子を使用して、フィルタリングするものを決定します。(多くの値がある場合は Aが最も効率的であり、おそらく概念的には正しい答えです…しかし、ほんの一握りの場合はそれほど問題ではありません。既に 4 つのインデックスを持つリストまたはタプルを取得している場合、それは"または" も使用できるので、そのまま使用できます。)SetSequencesetSetSequence

* 技術的には、何でも構いContainerません。しかし、 orContainerではないほとんどの s は、ここではばかげています。SetSequence

于 2013-08-26T18:45:27.647 に答える
3

enumerate()削除したいインデックスを使用して除外します。

[elem for i, elem in enumerate(inputlist) if i not in excluded_indices]

パフォーマンスについてexcluded_indicesは、set.

于 2013-08-26T18:45:14.257 に答える
1
numpy.delete(original_list,index_of_the_excluded_elements)

Pythonでは、インデックスは0から始まることに注意してください。したがって、質問の例では、コードは次のようになります。

import numpy as np
vector1=['a', 'b', 'c', 'd']
vector2 =np.delete(vector1,[0]) # ['b', 'c', 'd']
vector3 =np.delete(vector1,[0,1]) # ['c', 'd']
于 2020-01-20T10:28:55.500 に答える