Hi please see the question and answer below for the topic reversed Lists :
Question
strong text
answer:
strong text
I would like to know why this line: if lst1[index] != lst2[len(lst2) - 1 - index]: has us subrtacting - 1 and - index?
Hi please see the question and answer below for the topic reversed Lists :
Question
strong text
answer:
strong text
I would like to know why this line: if lst1[index] != lst2[len(lst2) - 1 - index]: has us subrtacting - 1 and - index?
Always keep pencil and paper nearby so you can sketch, list and plan.
Say we have seven elements in each list. With the starting index on the left being zero in the loop, how can we compute the corresponding index on the right?
len(lst) == 7 so `n = 7`
i == 0
n - i == 7
but the last index is one less than the length, so,
n - i - 1 == 6
Now increment i
,
n - i - 1 == 7 - 1 - 1 == 5
As we keep incrementing i
, the corresponding index gets smaller until i
reaches the upper bound, at which time the corresponding index reaches zero.
It gets even more fun when we consider negative indices.
[n - i - 1] => [-(i + 1)]
6 => -1
5 => -2
4 => -3
3 => -4
2 => -5
1 => -6
0 => -7
Letting a
and b
represent lst1
and lst2
, respectively,
for i in range(n):
if a[i] != b[-(i + 1)]: return False
Now consider that since we are not attempting to mutate the list, only iterate it, it follows this should work for any iterable.
def reverse_match(a, b):
n = len(a)
if n == len(b):
for i in range(n):
if a[i] != b[-(i + 1)]: break
else:
return True
return False
A list,
>>> reverse_match([1,2,3],[3,2,1])
True
>>> reverse_match([1,2,3,4],[3,2,1])
False
>>> reverse_match([],[])
True
>>> reverse_match([1,2,3],[4,2,1])
False
>>>
a string,
>>> reverse_match('Python!','!nohtyP')
True
>>> reverse_match('','')
True
>>> reverse_match('Python!','?nohtyP')
False
>>> reverse_match('Python!','nohtyP')
False
>>>
… and so on.