logo

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)

rozloženie mriežky

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

>

>

program dedičnosti v pythone
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




reťazec zreťazenia v jazyku Java
# 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).