2015-12-23 6 views
5

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

Это то, что я в настоящее время:

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 

Это правильный ответ. Однако при изменении «х» до 2 вместо 5 я получаю это:

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

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

спасибо.

+0

Возможный дубликат [Поиск первого и последнего индекса какого-либо значения в списке на Python] (http://stackoverflow.com/questions/522372/finding-first-and-last-index-of-some-value- в-список-в-питон) –

ответ

5

списки Жаль, что это не метод 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 
3

Ваша логика неверна, потому что вы вернете счетчик если 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 
2

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

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

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

2

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

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

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

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

def PositionLast(x,s): 

    count = -1 
    position = None 
    for i in s: 
     count += 1 
     if i == x: 
      position = count 
    return position 

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

Спасибо, Eimear.

 Смежные вопросы

  • Нет связанных вопросов^_^