title: Solve folding paper challenge
body: <p>Ok so I'm trying to solve this logical question in a pythonic way, but I'm not very good. Here goes:</p>
  
  <p>You have a piece of paper with a list of numbers on it like so: </p>
  
  <p>1 2 3 4 | 5 6 7 8 </p>
  
  <p>If you fold the paper from the left to the right down the middle, you get this order:</p>
  
  <p>(first number is on top)
  (4,5) (3,6) (2,7) (1,8)</p>
  
  <p>And you can fold it one more time either way, and get a new order (right-to-left example):</p>
  
  <p>(first number on top, then second below, ...etc)
  (8,1,4,5) (7,2,3,6)</p>
  
  <p>I started with seeing how to fold the paper and get a list of lists with the correct order:</p>
  
  <pre><code>paper = [1, 2, 3, 4, 5, 6, 7, 8]
  
  half_paper = len(paper)/2
  s = paper[:half_paper]
  e = paper[half_paper:]
  middle_distance = 0
  
  final_list = []
  
  for l in range(half_paper):
      print l
      m = [s[half_paper-middle_distance-1],e[middle_distance-half_paper]]
      final_list.append(m)     
      middle_distance += 1
  
   print final_list
  </code></pre>
  
  <p>This works, results in [[4,5], [3,6], [2,7], [1,8]] (fold left to right). But now I'm stuck. I've been trying to figure out a way to use list comprehension to apply the logic on the final_list result, so I can "fold" the paper again to get a result of [[5,4,1,8], [6,3,2,7]] (fold left to right again, or if fold right to left [[8,1,4,5], [7,2,3,6]]).</p>
  
  <p>I'm not sure how to use list comprehension to do what i did in the for loop, on a list of lists and result in a list of lists. Any ideas to get me started?</p>