Нахождение первого и последнего индекса некоторого значения в списке в Python - PullRequest
52 голосов
/ 07 февраля 2009

Существуют ли какие-либо встроенные методы, которые являются частью списков, которые дают мне первый и последний индекс некоторого значения, например:

verts.IndexOf(12.345)
verts.LastIndexOf(12.345)

Ответы [ 6 ]

85 голосов
/ 07 февраля 2009

Последовательности имеют метод index(value), который возвращает индекс первого появления - в вашем случае это будет verts.index(value).

Вы можете запустить его на verts[::-1], чтобы узнать последний индекс. Здесь это будет len(verts) - 1 - verts[::-1].index(value)

19 голосов
/ 01 июня 2011

Используйте i1 = yourlist.index(yourvalue) и i2 = yourlist.rindex(yourvalue).

12 голосов
/ 10 августа 2013

Если вы ищете индекс последнего вхождения myvalue в mylist:

len(mylist) - mylist[::-1].index(myvalue) - 1
8 голосов
/ 08 апреля 2015

В качестве небольшой вспомогательной функции:

def rindex(mylist, myvalue):
    return len(mylist) - mylist[::-1].index(myvalue) - 1
1 голос
/ 25 апреля 2017

Этот метод может быть более оптимизирован, чем выше

def rindex(iterable, value):
    try:
        return len(iterable) - next(i for i, val in enumerate(reversed(iterable)) if val == value) - 1
    except StopIteration:
        raise ValueError
0 голосов
/ 13 марта 2019

В списках Python есть метод index(), который можно использовать для поиска позиции первого вхождения элемента в списке. Обратите внимание, что list.index() повышает ValueError, когда значение не найдено в списке, поэтому вы можете заключить его в try / except:

def index(lst, value):
    try:
        return lst.index(value)
    except ValueError:
        return None

print(index([1, 2, 3], 2))  # 1
print(index([1, 2, 3], 4))  # None

Чтобы найти позицию последнего вхождения элемента в списке эффективным способом, вы можете использовать эту функцию:

def rindex(lst, value):
    for i, v in enumerate(reversed(lst)):
        if v == value:
            return len(lst) - i - 1  # return the index in the original list
    return None    

print(rindex([1, 2, 3], 3))     # 2
print(rindex([3, 2, 1, 3], 3))  # 3
print(rindex([3, 2, 1, 3], 4))  # None
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...