Vito De Tullio wrote: > MRAB wrote: > >> It turns out that both S & {x} and {x} & S return {x}, not {y}. > > curious. > > $ python > Python 2.7.3 (default, Jul 3 2012, 19:58:39) > [GCC 4.7.1] on linux2 > Type "help", "copyright", "credits" or "license" for more information. >>>> x = (1,2,3) >>>> y = (1,2,3) >>>> s = set([y]) >>>> (s & set([x])).pop() is y > False >>>> (set([x]) & s).pop() is y > True > > maybe it's implementation-defined?
I think the algorithm looks for the smaller set: >>> set(range(5)) & set(map(float, range(10))) set([0, 1, 2, 3, 4]) >>> set(range(10)) & set(map(float, range(5))) set([0.0, 1.0, 2.0, 3.0, 4.0]) You have two sets of the same length, so there is no advantage in swapping them before calculating the intersection. -- http://mail.python.org/mailman/listinfo/python-list