Search code examples
pythonlistsplit

Split a list into half by even and odd indexes?


Possible Duplicate:
Python program to split a list into two lists with alternating elements

Problem

Given a list like this:

list1 = [blah, 3, haha, 2, pointer, 1, abcd, fire]

I expect to get this output:

list = [3, 2, 1, fire]

So what I want is to make a list of even elements of the former list.

What I tried

I tried using a for statement and tried to delete 2nd element while appending them to the list, but it didn't work out:

count = 0
for a in list1:
 list2.append(a)
 if count % 2 = = 1:
  list2.pop(count)

print list2

Solution

  • This should give you what you need - sampling a list at regular intervals from an offset 0 or 1:

    >>> a = ['blah', 3,'haha', 2, 'pointer', 1, 'poop', 'fire']
    >>> a[0:][::2] # even
    ['blah', 'haha', 'pointer', 'poop']
    >>> a[1:][::2] # odd
    [3, 2, 1, 'fire']
    

    Note that in the examples above, the first slice operation (a[1:]) demonstrates the selection of all elements from desired start index, whereas the second slice operation (a[::2]) demonstrates how to select every other item in the list.

    A more idiomatic and efficient slice operation combines the two into one, namely a[::2] (0 can be omitted) and a[1::2], which avoids the unnecessary list copy and should be used in production code, as others have pointed out in the comments.