Ordering python sets

Tim Chase python.list at tim.thechases.com
Wed Oct 22 15:07:36 CEST 2008


> I think that using Python sets would be the best choice, but I also
> need integers to be ordered inside the set and I've just found out
> that, instead, Python sets are unordered collections.

Sets (both in Python, and their mathematical definition) are 
unordered.  However, some simple testing in my current python 
seems to indicate that both their repr() and their __iter__() 
seem to traverse in sorted order (though that may be a niceness 
that Python performs in 2.3 and above).  You can just order them 
when you go to operate on them:

   import random as r

   # to test in <2.4
   from sets import Set as set
   s = set([r.randint(1,1000) for _ in range(1000)])
   # for 2.4+
   s = set(r.randint(1,1000) for _ in range(1000))

   print s
   for i in sorted(list(s)):
     do_something(i)

Though for each test, in 2.3, 2.4, and 2.5 that I've got 
installed on my local machine, they each printed "s" in-order, 
and the iteration occurred in-order as well, even without the 
added "sorted(list(s))" code.

-tkc






More information about the Python-list mailing list