1. ホーム
  2. python

[解決済み] Pythonで1つの項目を除くすべての項目をインデックス化する

2022-04-25 19:40:26

質問

リスト (または配列など) のすべての要素にインデックスを付ける簡単な方法はありますか? ただし は、特定のインデックスについてですか? 例えば

  • mylist[3] は、位置 3 の項目を返します

  • milist[~3] は 3 を除いた全リストを返します。

解決方法は?

の場合 リスト を使えば、リストコンプができる。 例えば b のコピーです。 a 3番目の要素を除いたものです。

a = range(10)[::-1]                       # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
b = [x for i,x in enumerate(a) if i!=3]   # [9, 8, 7, 5, 4, 3, 2, 1, 0]

これは非常に一般的なもので、numpy の配列を含むすべての反復記号で使用することができます。 もし []() , b はリストではなくイテレータになります。

または、これをインプレースで pop :

a = range(10)[::-1]     # a = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
a.pop(3)                # a = [9, 8, 7, 5, 4, 3, 2, 1, 0]

numpy を使えば、ブーリアンインデックスでこれを行うことができます。

a = np.arange(9, -1, -1)     # a = array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
b = a[np.arange(len(a))!=3]  # b = array([9, 8, 7, 5, 4, 3, 2, 1, 0])

で、一般に上記のリスト内包よりずっと高速になります。