Есть ли встроенные методы, которые являются частью списков, которые дадут мне первый и последний индекс некоторого значения, например:
verts.IndexOf(12.345)
verts.LastIndexOf(12.345)
Есть ли встроенные методы, которые являются частью списков, которые дадут мне первый и последний индекс некоторого значения, например:
verts.IndexOf(12.345)
verts.LastIndexOf(12.345)
Последовательности имеют метод index(value), который возвращает индекс первого вхождения - в вашем случае это будет verts.index(value).
Вы можете запустить его на verts[::-1], чтобы узнать последний индекс. Здесь это будет len(verts) - 1 - verts[::-1].index(value)
Используйте i1 = yourlist.index(yourvalue) и i2 = yourlist.rindex(yourvalue).
Я довольно раздражен тем, что мой неправильный ответ продолжает вызывать недовольство, но, похоже, это то, что ищут люди. Вот решение, чтобы найти последний индекс i вашего значения 12.345 в вашем списке verts.
for i, v in enumerate(reversed(verts)):
if v == '12.345':
break
Если вы ищете индекс последнего вхождения myvalue в mylist:
len(mylist) - mylist[::-1].index(myvalue) - 1
В качестве небольшой вспомогательной функции:
def rindex(mylist, myvalue):
return len(mylist) - mylist[::-1].index(myvalue) - 1
В списках 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
Этот метод может быть более оптимизирован, чем выше
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
s.index(x[, i[, j]])
индекс первого вхождения x в s (в или после индекса i и перед индексом j)