AwesomePossum
AwesomePossum

Reputation: 17

Reverse a specific slice of a list in Python

I am trying to write a function that will receive a list and will return a list containing inverted elements between even and odd index. For example:

IP : [1,2,3,4]

OP : [2,1,4,3]

I don't understand why I get an IndexError: list index out of range error with the following code:

def mixed(list): 
 
  x = 0
  y = 2
  l = []

  for element in list: 
    mod_list = list[x:y]
    l.append(mod_list[1])
    l.append(mod_list[0]
    x += 2
    y += 2

  return l

The l.append(mod_liste[1]) seems to be the issue...

Upvotes: 0

Views: 47

Answers (2)

Uzair
Uzair

Reputation: 337

If you don't want to use build-in function. Just make your loop stop when y is greater than list length. Make check for odd list.

def mixed(list):

x = 0
y = 2
l = []

for element in list:
    mod_list = list[x:y]
    l.append(mod_list[1])
    l.append(mod_list[0])
    x += 2
    y += 2
    if y > list.__len__() and list.__len__()%2 == 0:
        break
    elif y > list.__len__() and list.__len__()%2 != 0:
        l.append(list[y-2])
        break

return l

Upvotes: 0

Julien
Julien

Reputation: 15071

You can use built-in functions and slicing for that:

from itertools import chain

L = [1,2,3,4]
list(chain(*zip(L[1::2],L[::2]))) # [2,1,4,3]

Upvotes: 2

Related Questions