title: Distributed `itertools.combinations`
body: <p>I am using <code>itertools.combinations</code> inconjunction with <code>itertools.cycle</code> to create a set of objects to assign to another list of objects. Sadly if the lists are not the same length or evenly divisible then the first item in the list gets un-evenly weighted.</p>
  
  <pre><code>cycle_of_combinations = cycle(combinations(['A', 'B', 'C', 'D'], 2))
  #(('A', 'B'), 
  # ('A', 'C'), 
  # ('A', 'D'), 
  # ('B', 'C'), 
  # ('B', 'D'), 
  # ('C', 'D'))
  
  assigned_combinations = []
  for _ in range(0, 9):
     assigned_combinations.append(cycle_of_combinations.next())
  
  # assigned_combinations = [
  # ('A', 'B'), 
  # ('A', 'C'), 
  # ('A', 'D'), 
  # ('B', 'C'), 
  # ('B', 'D'), 
  # ('C', 'D'),
  # ('A', 'B'), 
  # ('A', 'C'), 
  # ('A', 'D')]
  </code></pre>
  
  <p>In the above example combinations that contain 'A' are over-represented. Is there a quick way to better evenly distribute the combinations?</p>
  
  <p>Here's an example of a set that would be more evenly distributed, in this set I've selected every 2nd item until there are 9 items:</p>
  
  <pre><code># assigned_combinations = [
  # ('A', 'B'), 
  # ('A', 'D'), 
  # ('B', 'D'), 
  # ('A', 'C'), 
  # ('B', 'C'), 
  # ('C', 'D'),
  # ('A', 'B'), 
  # ('A', 'D'), 
  # ('B', 'D')]
  </code></pre>