Намиране на индекса на елемент, зададен в списък, който го съдържа, в Python
Как мога да получа индекса (1) на Python за списък ["foo", "bar", "baz"]
и елемент от списъка "bar"
?
2865
3
Как мога да получа индекса (1) на Python за списък ["foo", "bar", "baz"]
и елемент от списъка "bar"
?
Справка: Data Structures > More on Lists
Caveats follow
Обърнете внимание, че макар това да е може би най-чистият начин да отговорите на въпроса както е зададен,
index
е доста слаб компонент на приложния програмен интерфейсlist
и не мога да си спомня кога за последен път съм го използвал в гнева си. В коментарите ми беше обърнато внимание, че тъй като този отговор е силно препратен, той трябва да бъде по-пълен. Следват някои предупреждения относноlist.index
. Вероятно си заслужава първоначално да погледнете документацията за него:Линейна времева сложност при дължина на списъка
Извикването на
index
проверява последователно всеки елемент от списъка, докато не намери съответствие. Ако списъкът ви е дълъг и не знаете приблизително къде в списъка се намира, това търсене може да се превърне в затруднение. В такъв случай трябва да помислите за друга структура на данните. Обърнете внимание, че ако знаете приблизително къде да намерите съвпадението, можете да дадете наindex
подсказка. Например в този фрагментl.index(999_999, 999_990, 1_000_000)
е приблизително пет порядъка по-бърз от директнияl.index(999_999)
, тъй като първият трябва да търси само 10 записа, докато вторият търси милион:Връща само индекса на първото съвпадение на аргумента си
Извикването на
index
претърсва списъка по ред, докато намери съвпадение, и спира дотук. Ако очаквате да ви трябват индекси на повече съвпадения, трябва да използвате разбиране на списък или генераторен израз.На повечето места, където някога съм използвал
index
, сега използвам разбиране на списък или генераторен израз, защото те са по-общи. Така че, ако смятате да посегнете къмindex
, разгледайте тези отлични възможности на Python.Хвърля, ако елементът не присъства в списъка
Извикването на
index
води доValueError
, ако елементът'не присъства.Ако елементът може да не присъства в списъка, трябва или
item in my_list
(чист, четлив подход), илиindex
в блокtry/except
, който улавяValueError
(вероятно по-бързо, поне когато списъкът за търсене е дълъг и елементът обикновено присъства).Едно от нещата, които са наистина полезни при изучаването на Python, е да използвате функцията за интерактивна помощ:
която често ще ви отведе до търсения метод.
index()
връща първия индекс на стойността!