Python | Načini iskanja indeksov vrednosti na seznamu

Običajno zahtevamo, da poiščemo indeks, v katerem se določena vrednost nahaja. Obstaja veliko metod za dosego tega, z uporabo index() itd. Toda včasih je treba najti vse indekse določene vrednosti, če se na seznamu pojavi več. Pogovorimo se o nekaterih načinih iskanja indeksov vrednosti na danem seznamu Python .

Načini iskanja indeksov vrednosti na seznamu

Spodaj so metode, ki jih bomo obravnavali v tem članku:

Poiščite indeks predmeta z uporabo naivne metode

To nalogo lahko dosežemo s ponavljanjem po seznamu in preverjanjem te vrednosti ter dodajanjem indeksa vrednosti v nov seznam in to natisnemo. To je osnovna metoda surove sile za doseganje te naloge.

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

Izhod

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

Časovna zapletenost: O(n)
Pomožni prostor: O(n)

Poiščite indeks elementa z razumevanjem seznama

Razumevanje seznama je samo skrajšana tehnika za dosego naloge z grobo silo, uporablja le manj vrstic kode za doseganje naloge in tako programerjem prihrani č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))>

Izhod

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

Časovna zapletenost: O(n)
Pomožni prostor: O(n)

Poiščite indeks predmeta z uporabo Enumerate() F maziljenje

Uporaba naštej() lahko dosežemo podobno nalogo, to je nekoliko hitrejša tehnika od zgornje, zato jo priporočamo namesto tehnike razumevanja seznama.

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

Izhod

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

Časovna zapletenost: O(n)
Pomožni prostor: O(n)

Poiščite indeks predmeta z uporabo filter() F maziljenje

To je še ena metoda, ki jo je mogoče uporabiti za doseganje te posebne naloge, filter() je običajno sposoben opravljati naloge filtriranja in ga je zato mogoče uporabiti tudi v tej situaciji za doseganje te naloge.

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

Izhod

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

Časovna zapletenost: O(n)
Pomožni prostor: O(n)

Poiščite indeks predmeta z uporabo knjižnice numpy

Ta program uporablja knjižnica numpy da dani seznam pretvori v matriko, poišče indekse dane vrednosti v matriki in pretvori dobljeno niz numpy nazaj na seznam. Nazadnje natisne seznam indeksov.

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

IZHOD:

New indices list : [1, 3] 

Časovna zahtevnost: O(n), kjer je n dolžina vhodnega seznama.
Pomožni prostor: O(n), ker ustvari novo matriko numpy z enako dolžino kot vhodni seznam.

Poiščite indeks elementa z uporabo zanke for

Inicializirajte prazen seznam, imenovan res_list, da shranite indekse ciljnih vrednosti. Iterirajte skozi vsak element na vhodnem seznamu test_list z uporabo zanke for. Če se trenutni element ujema s ciljno vrednostjo, dodajte njegov indeks res_listu. Ko je zanka končana vrne res_list kot izhod.

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

Izhod

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

Časovna zahtevnost: O(n) , kjer je n dolžina vhodnega seznama test_list.
Pomožni prostor: O(k) , kjer je k število pojavitev ciljne vrednosti.

Poiščite indeks predmeta z uporabo metode list.index() z zanko while

Inicializirajte indekse praznega seznama za shranjevanje indeksov dane vrednosti. Inicializirajte spremenljivko i na -1. Zaženite zanko while, ki se nadaljuje, dokler ne naletite na stavek break. Znotraj zanke while uporabite list.index() metoda za iskanje indeksa podane vrednosti na seznamu, ki se začne z indeksom i + 1. Če je indeks najden, ga pripnite na seznam indeksov in posodobite vrednost i na najdeni indeks. Če indeksa ne najdete, prekinite zanke while. Natisnite seznam indeksov.

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

Izhod

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

Časovna zapletenost: O(n), metoda list.index() ima v najslabšem primeru časovno zapletenost O(n), ker mora iterirati po seznamu, da najde indeks dane vrednosti. Zanka while ima tudi časovno zapletenost od O(n) v najslabšem primeru, ker mora iterirati po seznamu, da najde vse pojavitve dane vrednosti.
Pomožni prostor: O(1), prostor, ki ga uporabljata seznam indeksov in spremenljivka i, je konstanten in ni odvisen od velikosti vhodnega seznama, zato je kompleksnost pomožnega prostora O(1).