I have a small doubt.When running the following code in python I am not getting the desired result.Can anyone explain why?
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
Output for the above code is:-
[62, 98, 98, 27, 23, 70, 98, 98, 93, 93, 53, 60, 60, 62]
But it should be-:
[62, 98, 98, 27, 23, 70, 98, 98, 93, 93, 53, 60, 60, 23]
The only error I am getting is at the last element 62 as it should be 23 .Can anyone explain the reason?
2 Answers 2
As asongtoruin mentions in the comment your code doesn't do what you want because the .index method finds the first matching element in the list. So when it's testing the final 4, it _doesn't test it against the 23, it tests it against the 62 following the first 4 in x.
Here's a better way.
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)
output
[62, 98, 98, 27, 23, 70, 98, 98, 93, 93, 53, 60, 60, 23]
FWIW, it's a good idea to avoid using .index unless you really need it because it has to scan linearly through the list looking for matches, so it's not very efficient.
Comments
The end index of the slice is exclusive. Your value is -1 which means the last element which is exclusive - so it skips it.
Change x[:-1] to x[:] which will go through every element.
x.index(4) = 0. It's the duplication of 4 in your list with the use ofindexthat causes the problem.