[Tutor] Removing duplicates in a list with a fixed length of items in the list.

Kent Johnson kent37 at tds.net
Thu Jan 11 15:32:40 CET 2007


Adam Cripps wrote:
> I have a list which comprises of simple random arithmetic problems for
> teachers to give to their pupils. This list must be a set length (if
> the teacher asks for 10 questions, they should get 10 questions), but
> should not have any duplicates.
> 
> I've seen the use of sets, but this reduces the size of the list, when
> I have to have a fixed length.
> 
> Is there a quick way of checking if a string is already within a list
> without iterating over the items of the list (which will slow the
> application down slightly)?

Hmm. If you are trying to pick 10 elements at random from a larger list, 
use random.sample(problems, 10)

If for some reason that doesn't work for you (maybe you are creating 
problems on the fly?) you could build a set in a loop, adding items 
until it is the size you want:
problemSet = set()
while len(problemSet) < 10:
   # do something to add a (possibly) new problem to the set

Finally, unless your lists are huge (thousands of items, at a guess) or 
you are doing this very many times (thousands of times), you will not 
notice the time it takes to search the list for duplicates.

Kent



More information about the Tutor mailing list