Sorry, missing some conditions *already_picked_list* is get from db.
> Why keep a counter? Rather than an iterated loop so , if use a iterated loop: for i in range(43): item = choice( ALIST ) ALIST.remove( item ) if item in already_picked_list: continue slot.append( item ) For example, if we picked item from ALIST 43 times, but all picked items are in already_picked_list What's the slot? It's a empty list, not contains item from ALIST. *This is wrong* > Do you really want to remove an item from the source list? *Yes*, i*tems in slot must be unique* ( This is also a condition, which I have missing... ) > and if you don't want duplicates from within a source list, you should remove them when building the source list * As I mentioned , The source list are all unique elements* Your last code. if B ,C ,D are all empty, result's elements are all from A, A's probability is 100% ? I Know , this problem should treated as two situation: If the four list has not enough elements, There are no way to ensure the probability requirements. If they has enough elements, Your solution is a good way.
-- http://mail.python.org/mailman/listinfo/python-list