logo

Python | Způsoby, jak najít indexy hodnoty v seznamu

Obvykle požadujeme najít index, ve kterém se daná hodnota nachází. Existuje mnoho metod, jak toho dosáhnout, pomocí index() atd. Ale někdy je potřeba najít všechny indexy konkrétní hodnoty v případě, že má v seznamu více výskytů. Pojďme diskutovat o určitých způsobech, jak najít indexy hodnoty v daném seznamu Krajta .

Způsoby, jak najít indexy hodnoty v seznamu

Níže jsou uvedeny metody, které pokryjeme v tomto článku:



Najděte rejstřík položky pomocí naivní metody

Tohoto úkolu můžeme dosáhnout procházením seznamu a kontrolou této hodnoty a pouhým připojením indexu hodnoty do nového seznamu a jeho tiskem. Toto je základní metoda hrubé síly k dosažení tohoto úkolu.

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ýstup

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

Časová náročnost: Na)
Pomocný prostor: Na)

porovnat s javou

Najděte rejstřík položky pomocí funkce List Comprehension

Porozumění seznamu je pouze zkrácená technika k dosažení úkolu hrubou silou, k dosažení úkolu používá pouze menší řádky kódů, a proto šetří programátorům č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ýstup

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

Časová náročnost: Na)
Pomocný prostor: Na)

Najděte rejstřík položky pomocí Enumerate() F pomazání

Použitím vyjmenovat() můžeme dosáhnout podobného úkolu, je to o něco rychlejší technika než výše uvedená, a proto se doporučuje používat ji před technikou porozumění seznamu.

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ýstup

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

Časová náročnost: Na)
Pomocný prostor: Na)

Najděte rejstřík položky pomocí filtru() F pomazání

Toto je další metoda, kterou lze použít k dosažení tohoto konkrétního úkolu, filtr() obvykle je schopen provádět úkoly filtrování, a proto může být také použit v této situaci k dosažení tohoto úkolu.

Python3


kat timpf výška



# 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ýstup

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

Časová náročnost: Na)
Pomocný prostor: Na)

Najděte rejstřík položky pomocí numpy knihovny

Tento program používá nudná knihovna převést daný seznam na pole, najde indexy dané hodnoty v poli a převede výsledný numpy pole zpět na seznam. Nakonec vytiskne seznam indexů.

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ÝSTUP:

New indices list : [1, 3]>

Časová složitost: O(n), kde n je délka seznamu vstupů.
Pomocný prostor: O(n), protože vytvoří nové numpy pole se stejnou délkou jako vstupní seznam.

Najděte rejstřík položky pomocí smyčky for

Inicializujte prázdný seznam s názvem res_list pro uložení indexů cílových hodnot. Procházejte každý prvek ve vstupním seznamu test_list pomocí cyklu for. Pokud aktuální prvek odpovídá cílové hodnotě, připojte jeho index k res_list. Po dokončení cyklu , vraťte jako výstup 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))>

>

>

Výstup

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

Časová složitost: O(n) , kde n je délka vstupního seznamu test_list.
Pomocný prostor: O(k) , kde k je počet výskytů cílové hodnoty.

Najděte index položky pomocí metody list.index() s while smyčkou

Inicializujte prázdný seznam indexů pro uložení indexů dané hodnoty. Inicializujte proměnnou i na -1. Spusťte cyklus while, který pokračuje, dokud nenarazíte na příkaz break. Uvnitř cyklu while použijte list.index() metoda k nalezení indexu dané hodnoty v seznamu počínaje indexem i + 1. Pokud je index nalezen, přidejte jej do seznamu indexů a aktualizujte hodnotu i na nalezený index. Pokud index nebyl nalezen, přerušte cyklus while. Vytiskněte seznam indexů.

Python3




přirovnat k struně
# 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ýstup

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

Časová náročnost: O(n),Metoda list.index() má v nejhorším případě časovou složitost O(n), protože k nalezení indexu dané hodnoty potřebuje iterovat seznamem. Smyčka while má také časovou složitost of O(n) v nejhorším případě, protože potřebuje iterovat seznam, aby našel všechny výskyty dané hodnoty.
Pomocný prostor: O(1), Prostor používaný seznamem indexů a proměnnou i je konstantní a nezávisí na velikosti vstupního seznamu, takže složitost pomocného prostoru je O(1).