Есть ли встроенные методы, которые являются частью списков, которые дадут мне первый и последний индекс некоторого значения, например:
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)