title: How to sample from Cartesian product without repetition
body: <p>I have a list of sets, and I wish to sample n different samples each containing an item from each set. 
  What I do not want is to have it in order, so, for example, I will get all the samples necessarily with the same item from the first set. I also don't want to create all the Cartesian products as that might not be possible in terms of efficiency...
  Any idea of how to do it? Or even something to approximate this behaviour?</p>
  
  <p>Example that does not work:</p>
  
  <pre><code>(prod for i, prod in zip(range(n), itertools.product(*list_of_sets)))
  </code></pre>