通常、特定の値が配置されているインデックスを見つける必要があります。これを実現するには、index() などを使用する多くの方法があります。ただし、リスト内に複数の値がある場合、特定の値のすべてのインデックスを検索する必要がある場合があります。指定されたリストから価値の指標を見つける特定の方法について説明しましょう。 パイソン 。
リスト内の値のインデックスを見つける方法
この記事で説明する方法は次のとおりです。
- 素朴な方法の使用
- 使用する リストの内包表記
- 使用する Enumerate() 関数
- 使用する filter() 関数
- 使用する ナンピー図書館
- を使って for ループ
- 使用する list.index() メソッド とともに while ループ
Naive メソッドを使用して項目のインデックスを検索する
このタスクは、リストを反復処理してその値をチェックし、新しいリストに値のインデックスを追加してそれを出力するだけで実現できます。これは、このタスクを達成するための基本的な強引な方法です。
Python3
# initializing list> test_list> => [> 1> ,> 3> ,> 4> ,> 3> ,> 6> ,> 7> ]> # printing initial list> print> (> 'Original list : '> +> str> (test_list))> # using naive method to find indices for 3> res_list> => []> for> i> in> range> (> 0> ,> len> (test_list)):> > if> test_list[i]> => => 3> :> > res_list.append(i)> # printing resultant list> print> (> 'New indices list : '> +> str> (res_list))> |
>
>出力
Original list : [1, 3, 4, 3, 6, 7] New indices list : [1, 3]>
時間計算量: の上)
補助スペース: の上)
シェザド・プーナワラ
リスト内包表記を使用して項目のインデックスを検索する
リストの内包表記 これは総当りタスクを達成するための簡略手法にすぎず、より少ないコード行でタスクを達成するだけなので、プログラマーの時間を節約できます。
Python3
# initializing list> test_list> => [> 1> ,> 3> ,> 4> ,> 3> ,> 6> ,> 7> ]> # printing initial list> print> (> 'Original list : '> +> str> (test_list))> # using list comprehension> # to find indices for 3> res_list> => [i> for> i> in> range> (> len> (test_list))> if> test_list[i]> => => 3> ]> # printing resultant list> print> (> 'New indices list : '> +> str> (res_list))> |
>
>出力
Original list : [1, 3, 4, 3, 6, 7] New indices list : [1, 3]>
時間計算量: の上)
補助スペース: の上)
Enumerate() を使用して項目のインデックスを検索する F 機能
使用する 列挙() 同様のタスクを実現できます。これは上記よりもわずかに高速な手法であるため、リスト理解手法よりも使用することをお勧めします。
Python3
# initializing list> test_list> => [> 1> ,> 3> ,> 4> ,> 3> ,> 6> ,> 7> ]> # printing initial list> print> (> 'Original list : '> +> str> (test_list))> # using enumerate()> # to find indices for 3> res_list> => [i> for> i, value> in> enumerate> (test_list)> if> value> => => 3> ]> # printing resultant list> print> (> 'New indices list : '> +> str> (res_list))> |
>
>
アンドロイドを使ったimessageゲーム出力
Original list : [1, 3, 4, 3, 6, 7] New indices list : [1, 3]>
時間計算量: の上)
補助スペース: の上)
filter() を使用して項目のインデックスを検索する F 機能
これは、この特定のタスクを達成するために使用できるさらに別の方法です。 フィルター() 通常はフィルタリング タスクを実行できるため、この状況でもこのタスクを達成するために使用できます。
Python3
# initializing list> test_list> => [> 1> ,> 3> ,> 4> ,> 3> ,> 6> ,> 7> ]> # printing initial list> print> (> 'Original list : '> +> str> (test_list))> # using filter() to find indices for 3> res_list> => list> (> filter> (> lambda> x: test_list[x]> => => 3> ,> range> (> len> (test_list))))> # printing resultant list> print> (> 'New indices list : '> +> str> (res_list))> |
>
>出力
Original list : [1, 3, 4, 3, 6, 7] New indices list : [1, 3]>
時間計算量: の上)
補助スペース: の上)
numpy ライブラリを使用して項目のインデックスを検索する
このプログラムでは、 numpyライブラリ 指定されたリストを配列に変換し、配列内の指定された値のインデックスを見つけて、結果の値を変換します。 numpy配列 リストに戻る。最後に、インデックスのリストを出力します。
Python3
import> numpy as np> test_list> => [> 1> ,> 3> ,> 4> ,> 3> ,> 6> ,> 7> ]> # convert the list to a numpy array> test_array> => np.array(test_list)> # find the indices of the value 3 in the array> res_array> => np.where(test_array> => => 3> )[> 0> ]> # convert the numpy array back to a list> res_list> => list> (res_array)> # printing resultant list> print> (> 'New indices list : '> +> str> (res_list))> |
>
>
出力:
New indices list : [1, 3]>
時間計算量: O(n)。n は入力リストの長さです。
補助スペース: O(n)。入力リストと同じ長さの新しい numpy 配列が作成されるためです。
for ループを使用して項目のインデックスを検索する
res_list という空のリストを初期化して、ターゲット値のインデックスを保存します。for ループを使用して、入力リスト test_list 内の各要素を繰り返し処理します。現在の要素がターゲット値と一致する場合は、そのインデックスを res_list に追加します。ループが終了した後、 、res_list を出力として返します。
Python3
# initializing list> test_list> => [> 1> ,> 3> ,> 4> ,> 3> ,> 6> ,> 7> ]> # printing initial list> print> (> 'Original list: '> +> str> (test_list))> # using a for loop to find indices for 3> res_list> => []> for> i> in> range> (> len> (test_list)):> > if> test_list[i]> => => 3> :> > res_list.append(i)> # printing resultant list> print> (> 'New indices list: '> +> str> (res_list))> |
>
>出力
Original list: [1, 3, 4, 3, 6, 7] New indices list: [1, 3]>
時間計算量: O(n) ここで、n は入力リスト test_list の長さです。
補助スペース:O(k) ここで、k はターゲット値の出現数です。
list.index() メソッドと while ループを使用して項目のインデックスを検索する
指定された値のインデックスを格納するために、空のリスト インデックスを初期化します。変数 i を -1 に初期化します。break ステートメントに到達するまで継続する while ループを実行します。while ループ内で、 list.index() インデックス i + 1 から始まるリスト内の指定された値のインデックスを見つけるメソッド。インデックスが見つかった場合は、それをインデックス リストに追加し、i の値を見つかったインデックスに更新します。インデックスが見つからない場合は、ブレークします。 while ループ。インデックスのリストを出力します。
Python3
gitリベース
# initializing list> my_list> => [> 1> ,> 3> ,> 4> ,> 3> ,> 6> ,> 7> ]> # printing initial list> print> (> 'Original list : '> +> str> (my_list))> # using list.index() method with a while loop to find indices for 3> indexes> => []> i> => -> 1> while> True> :> > try> :> > i> => my_list.index(> 3> , i> +> 1> )> > indexes.append(i)> > except> ValueError:> > break> print> (> 'New indices list : '> +> str> (indexes))> |
>
>出力
Original list : [1, 3, 4, 3, 6, 7] New indices list : [1, 3]>
時間計算量: O(n)、list.index() メソッドは、指定された値のインデックスを見つけるためにリストを反復処理する必要があるため、最悪の場合でも O(n) の時間計算量になります。while ループにも時間計算量があります。指定された値のすべての出現を見つけるためにリストを反復処理する必要があるため、最悪の場合は O(n) になります。
補助スペース: O(1)、インデックス リストと i 変数によって使用される空間は一定であり、入力リストのサイズに依存しないため、補助空間の複雑さは O(1) です。