2016-10-27 6 views
4

У меня есть небольшое сомнение. При запуске следующего кода в python я не получаю желаемого результата. Может кто-нибудь объяснить почему?Python неверный результат

x,temp=[4, 62, 98, 27, 23, 9, 70, 98, 73, 93, 38, 53, 60, 4, 23],[] 

for y in x[:-1]:temp.append(max(y,x[x.index(y)+1])) 

print temp 

Выход для указанного выше кода: -

[62, 98, 98, 27, 23, 70, 98, 98, 93, 93, 53, 60, 60, 62] 

Но это должно быть-:

[62, 98, 98, 27, 23, 70, 98, 98, 93, 93, 53, 60, 60, 23] 

Единственная ошибка я получаю на последнем элементе 62, как это должно быть 23. Может ли кто-нибудь объяснить причину?

+2

Когда y является последним элементом в вашем списке (4), 'x.index (4) = 0'. Это дублирование 4 в вашем списке с использованием 'index', что вызывает проблему. – asongtoruin

+0

Это точная ошибка и благодарю за то, что вы указали это. – TANMAYA

ответ

4

Как упоминается в комментарии, ваш код не делает то, что вы хотите, потому что метод .index находит первый соответствующий элемент в списке. Поэтому, когда он тестирует финал 4, он не тестирует его против 23, он тестирует его против 62 после первых 4 в x.

Вот лучший способ.

x = [4, 62, 98, 27, 23, 9, 70, 98, 73, 93, 38, 53, 60, 4, 23] 

temp = [max(u,v) for u,v in zip(x, x[1:])] 
print(temp) 

выход

[62, 98, 98, 27, 23, 70, 98, 98, 93, 93, 53, 60, 60, 23] 

FWIW, это хорошая идея, чтобы избежать использования .index, если вы действительно не нужно, потому что он должен сканировать линейно по списку в поисках совпадений, так что это не очень эффективно ,

1

Конечный индекс среза является исключительным. Ваше значение равно -1, что означает последний элемент, который является исключительным, поэтому он пропускает его.

x[:-1]x[:], который будет проходить через каждый элемент.

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