Python | Spôsoby, ako nájsť indexy hodnoty v zozname

Väčšinou požadujeme nájsť index, v ktorom sa konkrétna hodnota nachádza. Existuje mnoho spôsobov, ako to dosiahnuť, pomocou index() atď. Niekedy je však potrebné nájsť všetky indexy konkrétnej hodnoty v prípade, že má v zozname viacero výskytov. Poďme diskutovať o určitých spôsoboch, ako nájsť indexy hodnoty v danom zozname Python .

Spôsoby, ako nájsť indexy hodnoty v zozname

Nižšie sú uvedené metódy, ktorým sa budeme venovať v tomto článku:

Nájdite index položky pomocou naivnej metódy

Túto úlohu môžeme dosiahnuť opakovaním zoznamu a kontrolou tejto hodnoty a jednoduchým pripojením indexu hodnoty do nového zoznamu a jeho vytlačením. Toto je základná metóda hrubej sily na dosiahnutie tejto úlohy.

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))>

Výkon

Original list : [1, 3, 4, 3, 6, 7] New indices list : [1, 3] 

Časová zložitosť: O(n)
Pomocný priestor: O(n)

Nájdite index položky pomocou porozumenia zoznamu

Porozumenie zoznamu je len skratková technika na dosiahnutie úlohy hrubej sily, na splnenie úlohy používa len menšie riadky kódov a tým šetrí programátorom čas.

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))>

Výkon

Original list : [1, 3, 4, 3, 6, 7] New indices list : [1, 3] 

Časová zložitosť: O(n)
Pomocný priestor: O(n)

Nájdite index položky pomocou Enumerate() F pomazanie

Použitím enumerate() môžeme dosiahnuť podobnú úlohu, je to o niečo rýchlejšia technika ako vyššie uvedená, a preto sa odporúča použiť ju namiesto techniky porozumenia zoznamu.

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))>

Výkon

Original list : [1, 3, 4, 3, 6, 7] New indices list : [1, 3] 

Časová zložitosť: O(n)
Pomocný priestor: O(n)

Nájdite index položky pomocou filtra () F pomazanie

Toto je ďalšia metóda, ktorá môže byť použitá na dosiahnutie tejto konkrétnej úlohy, filter() zvyčajne je schopný vykonávať úlohy filtrovania, a preto sa dá použiť aj v tejto situácii na dosiahnutie tejto úlohy.

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))>

Výkon

Original list : [1, 3, 4, 3, 6, 7] New indices list : [1, 3] 

Časová zložitosť: O(n)
Pomocný priestor: O(n)

Nájdite index položky pomocou numpy knižnice

Tento program používa nudná knižnica na konverziu daného zoznamu na pole, nájde indexy danej hodnoty v poli a skonvertuje výsledný numpy pole späť na zoznam. Nakoniec vytlačí zoznam indexov.

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))>

VÝKON:

New indices list : [1, 3] 

Časová zložitosť: O(n), kde n je dĺžka zoznamu vstupov.
Pomocný priestor: O(n), pretože vytvorí nové numpy pole s rovnakou dĺžkou ako zoznam vstupov.

Nájdite index položky pomocou slučky for

Inicializujte prázdny zoznam s názvom res_list, aby ste uložili indexy cieľových hodnôt. Opakujte každý prvok vo vstupnom zozname test_list pomocou cyklu for. Ak sa aktuálny prvok zhoduje s cieľovou hodnotou, pridajte jeho index do zoznamu res_list. Po dokončení cyklu , vráťte zoznam res_list ako výstup.

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))>

Výkon

Original list: [1, 3, 4, 3, 6, 7] New indices list: [1, 3] 

Časová zložitosť: O(n) , kde n je dĺžka vstupného zoznamu test_list.
Pomocný priestor: O(k) , kde k je počet výskytov cieľovej hodnoty.

Nájdite index položky pomocou metódy list.index() so slučkou while

Inicializujte prázdny zoznam indexov, aby sa uložili indexy danej hodnoty. Inicializujte premennú i na -1. Spustite cyklus while, ktorý pokračuje, kým nenájdete príkaz break. V rámci cyklu while použite list.index() metóda na nájdenie indexu danej hodnoty v zozname začínajúc od indexu i + 1. Ak sa index nájde, pridajte ho do zoznamu indexov a aktualizujte hodnotu i na nájdený index. Ak sa index nenájde, prerušte while cyklus.Vytlačte zoznam indexov.

Python3




# 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))>

Výkon

Original list : [1, 3, 4, 3, 6, 7] New indices list : [1, 3] 

Časová zložitosť: O(n),Metóda list.index() má v najhoršom prípade časovú zložitosť O(n), pretože na nájdenie indexu danej hodnoty potrebuje iterovať zoznamom. Cyklus while má tiež časovú zložitosť of O(n) v najhoršom prípade, pretože potrebuje iterovať zoznam, aby našiel všetky výskyty danej hodnoty.
Pomocný priestor: O(1), Priestor používaný zoznamom indexov a premennou i je konštantný a nezávisí od veľkosti vstupného zoznamu, takže zložitosť pomocného priestoru je O(1).