поиск последнего вхождения элемента в список python

Я хочу найти последнее вхождение элемента 'x' в последовательности 's' или вернуть None, если его нет, а позиция первого элемента равна 0

Это то, что я сейчас имею:

def PositionLast (x,s): count = len(s)+1 for i in s: count -= 1 if i == x: return count for i in s: if i != x: return None 

Когда я пытаюсь:

 >>>PositionLast (5, [2,5,2,3,5]) >>> 4 

Это правильный ответ. Однако, когда я меняю 'x' на 2 вместо 5, я получаю следующее:

 >>>PositionLast(2, [2,5,2,3,5]) >>> 5 

Ответ здесь должен быть 2. Я смущен относительно того, как это происходит, если кто-нибудь может объяснить, что мне нужно исправить, я был бы благодарен. Я также хотел бы завершить это с помощью самого базового кода.

Спасибо.

7 Solutions collect form web for “поиск последнего вхождения элемента в список python”

В списках жалости нет метода rindex , но вы можете использовать index :

 last = len(s) - s[::-1].index(x) - 1 

или эквивалентно

 for i, v in enumerate(reversed(s)): if v == x: last = len(s) - i - 1 break 

Ваша логика неверна, потому что вы возвращаете счетчик, если i==x и у вас есть дополнительный цикл при завершении вашей функции.

Вместо этого вы перебираете обратные формы перечисления своего списка и возвращаете индекс первого вхождения:

 def PositionLast (x,s): return next(i for i,j in list(enumerate(s))[::-1] if j == x) 

Демо-версия:

 print PositionLast (2, [2,5,2,3,5,3]) 2 print PositionLast (3, [2,5,2,3,5,3]) 5 print PositionLast (5, [2,5,2,3,5,3]) 4 

Ваш код неверен, он проверяет список с самого начала и останавливается в первом матче, и вы хотите проверить список в обратном порядке.

 def PositionLast (x,s): count = len(s) for i in s[::-1]: count -= 1 if i == x: return count return None 

Ваша первая строка дает правильный ответ только из-за совпадения:
– Считается равным 5 при проверке первого элемента.
– Считает равным 4 при проверке второго элемента, он соответствует, а затем возвращает 4.
– По совпадению, это индекс вашего последнего предмета.

Перечислите список в обратном порядке, а затем проверьте x. Это может быть эффективным способом, поскольку реверсивный список, а затем поиск индекса с начала является ресурсоемким.

 def PositionLast (x,s): for i in range(len(s)-1,0,-1): if s[i] == x: return i return None 
 def positionLast(x, L): answer = None for i,e in enumerate(L): if e==x: answer = i return answer 
 def positionLast(x, L): try: return max(i for i,e in enumerate(L) if e==x) except: return None 

Спасибо всем за ответы и помощь! К сожалению, ни у кого не было ответа, которого я искал, но независимо от того, я сам это сделал сам, но спасибо вам все же!

Вот окончательный код:

 def PositionLast(x,s): count = -1 position = None for i in s: count += 1 if i == x: position = count return position 

Это возвращает правильные ответы на все мои тесты.

Спасибо, Эймер.

  • Эффективность нарезки списка Python
  • Каков наиболее эффективный способ добавить элемент в список, только если его еще нет?
  • Как заменить номера с порядком в списке (python)
  • Самый маленький диапазон python из нескольких списков
  • Сравнение двух списков в Python
  • Как установить SciPy на 64-битную Windows?
  • python struct.pack (): пакет нескольких данных в списке или кортеже
  • Индексация Python со списком индексов для исключения
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.