Подтвердить что ты не робот

Поиск первого и последнего индекса какого-либо значения в списке в Python

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

verts.IndexOf(12.345)
verts.LastIndexOf(12.345)
4b9b3361

Ответ 1

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

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

Ответ 2

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

Я довольно раздражен тем, что мой неправильный ответ продолжает вызывать недовольство, но, похоже, это то, что ищут люди. Вот решение, чтобы найти последний индекс i вашего значения 12.345 в вашем списке verts.

for i, v in enumerate(reversed(verts)):
    if v == '12.345':
        break

Ответ 3

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

len(mylist) - mylist[::-1].index(myvalue) - 1

Ответ 4

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

def rindex(mylist, myvalue):
    return len(mylist) - mylist[::-1].index(myvalue) - 1

Ответ 5

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

try:
    idx = lst.index(value)
except ValueError:
    idx = 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

Ответ 6

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

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

Ответ 7

s.index(x[, i[, j]])

индекс первого вхождения x в s (в или после индекса i и перед индексом j)