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:
- Použití naivní metody
- Použitím Porozumění seznamu
- Použitím Funkce Enumerate().
- Použitím Funkce filter().
- Použitím Knihovna Numpy
- Používat pro Loop
- Použitím metoda list.index(). s zatímco Loop
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).