Python Python Collections (2016, retired 2019) Slices Slice Functions

Am i missing something with this

My exercise is returning the expected output but the check seems to be failing. Please help with what may be missing

slices.py
def first_4(listA):

    return listA[:4]


def first_and_last_4(listB):
    return listB[:4] + listB[-4:]


def odds(listC):
    return listC[1::2]


def reverse_evens(listD):
    listD= listD[::-1]
    return(listD[::2])

I think I know the issue you're having - is it with the last function by any chance? I made a basic error with that one the first go I had at it - my function didn't check whether the last index was odd or even, it just took that last index and iterated (backwards) from there.

My first code looked something like:

def reverse_evens (input):
    return input[::-2] 

which does exactly the same thing as your reverse_evens function. If the list I passed in to the function contained an odd number of items, it worked fine! But if the list had an even number, I was instead returning the odd-indexed items.

list1 = [1, 2, 3, 4, 5, 6, 7]

print(reverse_evens(list1))
[7, 5, 3, 1]

list2 = [1, 2, 3, 4, 5, 6, 7, 8]
print(reverse_evens(list2)
[8, 6, 4, 2]

How do you think you could add the % modulus operand to your function, to check whether the last index is even or odd, and start at the correct index accordingly?

2 Answers

Steven Parker
Steven Parker
204,860 Points

You're close, and your function should work already half of the time, based on the size of the list.

To make sure it works in all cases, try getting the even indexed items first, and then reversing them.

Thanks. I did not run through all the possible cases for the size of the list.